Conteúdo
Condicionais
As instruções condicionais determinam ao programa avaliar se uma certa condição está sendo atendida. Se a condição for atendida, o programa irá executar o código específico, mas se não for cumprida, o programa passará adiante para o código que vem adiante.
Esse tipo de instrução faz parte de todas as linguagens de programação. Em Go é muito similar a C ou Java exceto por obrigatoriamente não haver parênteses e obrigatoriamente haver chaves mesmo se houver apenas uma linha de código entre as chaves.
If
A instrução if
if
é uma instrução que possui uma condição booleana que executa um bloco de código se a condição for avaliada como true
e executa um bloco else
alternativo se a condição for avaliada como false
.
Sintaxe da instrução if
:
Se a condição for verdadeira, as linhas de código entre as chaves { } serão executadas.
Exemplo de uma instrução condicional simples, a instrução if
, que avaliará se uma instrução é verdadeira ou falsa e executará o código apenas no caso em que a instrução for verdadeira:
Criamos e atribuímos à variável idade
o valor inteiro '20' e estamos usando a instrução if
para verificar se é maior ou igual (>=) a 18 e, caso atenda esta condição, o programa vai imprimir na tela a frase "Maior de Idade".
A instrução if else
A instrução if
possui uma instrução opcional else
que será executada se a condição na instrução if
for avaliada como false
.
Sintaxe:
No trecho acima, se a condição for avaliada como false
, as linhas de código entre else { }
serão executadas.
Exemplo de uma instrução condicional composta utilizando if
e else
:
No código acima, em vez de apenas retornar se a condição for true
como fizemos no exemplo anterior, criamos uma instrução else
que será executada se a condição for false
. Nesse caso, como 20 é maior que 18, a condição testada é false
e as linhas de código dentro da instrução else
serão executadas. O programa acima irá imprimir "Maior de Idade".
A instrução if, else if, else
A instrução if
também possui componentes else if
e opcionais else
. A sintaxe é a seguinte:
As condições são avaliadas quanto à verdade de cima para baixo. Na declaração acima, se condição1
for verdadeira, as linhas de código entre if condição1 {
e a chave de fechamento }
são executadas.
Se condição1
for falsa e condição2
for verdadeira, as linhas de código entre else if condição2 {
e a próxima chave de fechamento }
serão executadas.
Se tanto condição1
quanto condição2
forem falsas, as linhas de código na instrução else
, entre else {
e a chave de fechamento }
serão executadas.
Em geral, qualquer que seja a condição if
ou else if
avaliada como true
, seu bloco de código correspondente é executado. Se nenhuma das condições for verdadeira, o bloco else
é executado. Pode haver qualquer número de declarações else if
.
Exemplo utilizando else if
:
Neste caso existem 3 possibilidades e a que será executada é a que está no else
, e vai imprimir "numero1 e numero2 são iguais".
Veja que as instruções if
podem ou não ter sua condicional entre parênteses. Normalmente elas são escritas sem os parênteses e no caso do else if
colocamos apenas para exemplificar que pode ser utilizado.
If com atribuição
Há mais uma forma de utilizar o if
que inclui uma instrução de atribuição abreviada opcional que é executada antes que a condição seja avaliada. Sua sintaxe é:
No código acima, a atribuição-declaração é executada primeiro, antes que a condição seja avaliada.
Exemplo:
No programa acima, idade
é inicializada na instrução if
. Uma coisa a ser observada é que idade
está disponível apenas para acesso de dentro do if
e else
, ou seja, o escopo de idade
é limitado a esses blocos. Se tentarmos acessar idade
de fora do if
ou else
, receberemos um erro de compilação undefined: idade
.
Exemplo de código que tenta acessar idade
fora de seu escopo:
Tente rodar o código acima para ver o erro de compilação, você visualizará uma mensagem similar a: ./prog.go:14:14: undefined: idade
Essa sintaxe geralmente é útil quando declaramos uma variável para fins de uso somente nas instruções if
e else
, e seu uso garante que o escopo da variável esteja limitado aos blocos de condicionais adjacentes à sua declaração.
Idiomático Go
Vimos várias implementações de if
+ else
e, inclusive, passamos por mais de uma maneira de escrever o mesmo programa. Por exemplo, vimos mais de uma forma de escrever um programa que verifica se a idade é maior que 18 usando if
e else
com construções diferentes.
Mas qual é a forma idiomática de codificar condicionais em Go? Na filosofia dessa linguagem, é melhor evitar desvios desnecessários e indentação de código. Também é considerado mais idiomático retornar o mais cedo possível. A maneira mais idiomática de escrever o programa acima na filosofia de Go seria evitando o else, e retornando o mais cedo possível.
Exemplo de código idiomático:
No código acima, assim que descobrimos que idade
é menor que 18, retornamos imediatamente. Isso evita o uso de instrução else
que é desnecessária.
Switch
<em breve>
Last updated