A sintaxe de [!thelang] é a seguinte:
[!java|scala|c]if (condição) { oQueFazerSeForVerdade(); oQueFazerDepoisSeForVerdade(); }[/!][!python]if condição: oQueFazerSeForVerdade() oQueFazerDepoisSeForVerdade()[/!] oQueFazerDeUmJeitoOuDeOutro()[!java|c];[/!]
Se a condição for verdade, o código do próximo bloco será executado e então o resto do código continua. Se a condição for falsa, o próximo bloco é ignorado e a execução continua depois disto. O bloco condicional pode conter várias instruções, pode até mesmo conter outros testes, com seus próprios sub-testes.
Neste exemplo, as instruções oQueFazerSeForVerdade()
e
oQueFazerDepoisSeForVerdade()
serão executadas se e somente se
a condição for verdadeira, mas a instrução
oQueFazerDeUmJeitoOuDeOutro()
vai ser executada se a condição
for verdadeira ou não.
Em [!thelang], os blocos de código são [!java|scala|c]envolvidos entre
chaves: um { abre o bloco, e um } fecha. Espaços em branco não são
importantes[/!][!java|c].[/!][!scala], uma vez que suas instruções ainda
estejam separadas com um ponto-e-vírgula ou um fim-de-linha.[/!]
[!java|scala|c]Ainda assim é muito importante indentar corretamente seu
código para mantê-lo legível.[/!] [!python]marcados pela indentação: todas
as linhas que estiverem um pouco deslocadas para a direita com espaços
pertencem ao bloco. Frequentemente se usam 4 espaços para indentação, mas
funciona se você usar mais ou menos espaços. Resumindo, quaisquer linhas do
bloco devem usar a mesma quantidade de espaços. O fim do bloco de código
Python não é marcado por nenhum caractere específico. Indentar linhas começa
um bloco e parar de indentar termina o bloco. Não esqueça do dois-pontos (:)
no final da linha do if
, python precisa dele para saber que um
novo bloco vai começar. O fato de que python se baseia em indentação para
delimitar blocos é uma ótima propriedade para iniciantes: vai forçar você a
aderir a padrões de apresentação de código estritos.[/!] É muito fácil se
perder no seu próprio código se ele não for corretamente indentado, então
você precisa deixar ele bem arrumado para que trabalhar nele continue sendo
agradável e produtivo.
Todas as indentações de um dado bloco devem ser consistentes, e não é possível cortar um bloco. os dois códigos a seguir estão incorretos e devem resultar em erro.
if condição:
oQueFazer()
oQueFazerDepois() # um espaço a mais
oQueFazerDeUmJeitoOuDeOutro()
se condição:
oQueFazer()
oQueFazerDeUmJeitoOuDeOutro()
oQueFazerASeguir() # este bloco não está condicionado a uma linha de condição
A condição deve ser uma expressão
[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]
. O
bloco interno do código será executado se a expressão for calculada como
[!c]1[/!][!java|scala]true[/!][!python]True[/!]
e será ignorado
se for
[!c]0[/!][!java|scala]false[/!][!python]False[/!]
.
[!python|scala|java][!java|scala]true[/!][!python]True[/!]
e
[!java|scala]false[/!][!python]False[/!]
são valores constantes
definidos por [!thelang] diretamente, assim como 0 ou 1 na matemática.[/!]
A condição pode ser uma variável
[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]
(vamos
voltar a falar de variáveis num próximo exercício, não se preocupe) ou um
teste aritmético, como x == 5
, que verifica se o valor atual de
x
é 5, ou algo como != (verificando inequação, ou seja,
retornando [!c]1[/!][!java|scala]true[/!][!python]True[/!] apenas se o lado
esquerdo é diferente do lado direito), < (menor que), >
(maior que), <= (menor ou igual a), >= (maior ou igual
a).
Cuidado com um erro clássico, que é verificar a igualdade da variável usando = no lugar de ==. Ainda bem que o [!java|scala|c]compilador[/!][!python]interpretador[/!] detecta este problema na maior parte das vezes, mas às vezes passa (como quando você está atribuindo valor a uma variável [!c]int[/!][!java|python|scala]booleana[/!]). Então é bom ter cuidado...
A condição pode também ser uma chamada para alguns métodos
particulares que retornam booleano. Por exemplo, o método
estáDeFrenteParaParede()
do buggle retorna
[!c]1[/!][!java|python|scala]true[/!] se o buggle está olhando para
uma parede, e false caso contrário.
Finalmente, uma condição pode ser composta de várias sub-condições conectadas por operadores booleanos:
cond1 [!java|scala|c]&&[/!][!python]and[/!] cond2
é verdadeiro
(true) quando cond1 e cond2 são ambos verdadeiros
(se cond1 é falso (false), cond2 não é nem sequer
calculado pois sabe-se previamente que a conjunção das duas proposições não
pode ser verdadeira).cond1 [!java|scala|c]||[/!][!python]or[/!] cond2
é verdadeiro
se cond1 ou cond2 é verdadeiro (se cond1 é
verdadeiro, cond2 não é nem sequer calculada pois já se sabe que a
disjunção de ambas as proposições não pode ser verdadeira).[!java|scala|c]![/!][!python]not [/!]cond
é verdadeira se
cond é falsa.Por fim, é possível especificar o que fazer quando a condição é falsa usando
a seguinte sintaxe. Neste caso, a instrução oQueFazerSeForFalso
será executada apenas se a condição for falsa.
[!java|scala|c]if (condição) { oQueFazerSeCondiçãoÉVerdadeira(); } else { oQueFazerSeForFalsa(); }[/!][!python]if (condição): oQueFazerSeCondiçãoÉVerdadeira() else: oQueFazerSeForFalsa()[/!]
Não esqueça do dois-pontos (:) depois do else, ele indica que um novo bloco está começando.
estáDeFrenteParaParede()
, que todo
buggle entende.
Este exercício é um pouco diferente: seu código tem que funcionar para vários buggles, cada um começando numa posição diferente. O mesmo código será executado para cada um deles.
Quando seu programa funcionar, vá para o próximo exercício, que está escondido numa sub-árvore da janela de seleção.