A sintaxe de [!thelang] é a seguinte:
[!java|scala|c]if (condição) { whatToDoIfTrue(); whatToDoNextIfTrue(); }[/!][!python]if condição: whatToDoIfTrue() whatToDoNextIfTrue()[/!] whatToDoAnyway()[!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 os próprios sub-testes dele.
Neste exemplo, as instruções whatToDoIfTrue()
e
whatToDoNextIfTrue()
serão executadas se e somente se a
condição for verdadeira, mas a instrução whatToDoAnyway()
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-o. Espaços em branco não são
importantes[/!][!java|c].[/!][!scala], uma vez que as 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 o 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 usar mais ou menos espaços. A resumir, 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 se 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çá-lo a
aderir a padrões de apresentação de código estritos.[/!] É muito fácil se
perder no seu próprio código se não for corretamente indentado, então
precisa deixá-lo bem-arrumado para que trabalhar nele continue a ser
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:
whatToDo()
whatToDoNext() # um espaço a mais
whatToDoAnyway()
se condição:
whatToDo()
whatToDoAnyway()
whatToDoNext() # 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 != (a verificar inequação, ou seja,
a retornar [!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 a usar = 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 está a atribuir 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 isFacingWall()
do
buggle retorna [!c]1[/!][!java|python|scala]true[/!] se o buggle está a
olhar 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
é true quando
cond1 e cond2 são ambos trues (se cond1 é
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
é true se
cond1 ou cond2 é true (se cond1 é true,
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 a usar
a seguinte sintaxe. Neste caso, a instrução oQueFazerSeForFalso
será executada apenas se a condição for falsa.
[!java|scala|c]if (condição) { whatToDoIfTheConditionIsTrue(); } else { whatToDoIfItsFalse(); }[/!][!python]if (condição): whatToDoIfTheConditionIsTrue() else: whatToDoIfItsFalse()[/!]
Não se esqueça do dois-pontos (:) depois do else, indica que um novo bloco está a começar.
isFacingWall()
, que todos os buggles entendem.
Este exercício é um pouco diferente: o seu código tem que funcionar para vários buggles, cada um a começar numa posição diferente. O mesmo código será executado para cada um deles.
Quando o seu programa funcionar, vá ao próximo exercício, que está escondido numa sub-árvore da janela de seleção.