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
!= (verifica inequação, ou seja, retorna
[!c]1[/!][!java|scala]true[/!][!python]True[/!] apenas se o lado
esquerdo é diferente do direito), < (smaller than - menor
que), > (larger than - maior que), <= (smaller or
equal to - menor ou igual a), >= (larger or equal to - 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 falso 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.