Instruções de seleção
Uma instrução de seleção é uma parte de código que altera o fluxo de acordo com o valor de uma condição, ou seja, há um teste para determinar se algo é true ou false e o resultado é processado de acordo com isso. No C#, temos 2 tipos: o bloco if-else e o bloco switch.
If-Else
O if-else executa uma instrução com base em um teste que retorne um valor true. Em um exemplo bem simples, eu declaro uma variável lendo da tela e escrevo algo de acordo com o valor dela:
São usadas todas as estruturas if-else.
O if inicialmente testa se o número é maior que 0: caso ele seja, escreve na tela que o número é positivo e ignora todo o resto da estrutura; caso não seja, o código é ignorado e pula para o else seguinte.
O else seguinte testa se o número é menor que 0: caso ele seja, escreve na tela que o número é negativo e ignora o resto da estrutura; caso não seja, o código é ignorado e pula para o else seguinte.
O próximo else, que não contém um teste, então é sempre executado quando nenhum dos testes anteriores seja verdadeiro, neste caso se o número for igual a 0, e escrene na tela que o número é neutro.
é possível também usar um if-else dentro do else para obter o mesmo resultado. Este bloco teria exatamente a mesma saída que no exemplo acima:
Um bloco if não precisa ter um else. Se, por exemplo, você quer escrever na tela que o número é positivo se for maior que 0, mas não fazer nada caso não seja, você pode simplesmente usar apenas o if:
Se quiser também que ele apenas diga se é positivo ou negativo e ignore o zero, basta usar apenas o if e o else if:
Em um terceiro caso, se deseja apenas dizer que o número é ou "positivo" ou "neutro ou negativo", você pode fazer da seguinte maneira:
Aqui, em um exemplo mais complexo e completo, eu escrevo se um caractere informado é letra maiúscula, letra minúscula, número, sinal de pontuação ou nenhum destes:
As funções que talvez você não conheça estão comentadas. Repare no cascateamento entre um if e outro que está dentro.
Existe um "encurtamento" do if (popularmente chamado de if shortcut) que é basicamente uma estrutura if-else para definir um valor de uma forma mais curta e economizando espaço. Por exemplo, você deseja ver se um aluno foi reprovado ou aprovado pegando 2 notas fazendo a média aritmética:
A sintaxe é "<condição> ? <valor caso true> : <valor caso false>". Neste caso, a condição é "(n1 + n2) / 2 >= 7", ou seja, a média das notas lidas for maior ou igual a 7. Caso true, retorna a palavra "aprovado", caso false retorna a palavra "reprovado".
Switch
O switch executa uma instrução a partir de uma lista de ações (chamada de seção switch) de acordo com o valor de uma variável. A palavra para o teste se chama case e a ação padrão (que tem função semelhante ao else) se chama default. Em um exemplo bem simplista:
é possível pular de um case para outro se não houver ações, porém é proibido que as ações não tenham um break antes do próximo case, inclusive na última ação (o default, geralmente). Também é possível usar expressões (repare no 5-2 que equivale a 3):
Há também a palavra "goto", que continua a ação em outro case. Cuidado com loops infinitos. Em um exemplo adaptado do site da Microsoft:
O preço dos cafés é crescente de acordo com o tamanho: 0.25 para o café pequeno, 0.50 para o grande e 0.75 para p pequeno. Repare o reaproveitamento de código, algo que é bom (mas em tão pequena escala não faz diferença). Veja o mesmo exemplo, com o mesmo resultado, porém sem reaproveitamento de código:
O resultado mostrado no final será o mesmo, mas o método para chegar neste resultado muda.
Como o else no bloco do if, o default é completamente opcional. Você pode tratar isso em outro lugar, como neste exemplo do café, há um teste para indicar o preço do café se ele for maior que 0, ou seja, caiu em algum dos cases. é possível omitir o default e usar um else para avisar que o usuário escolheu um número inválido.
Utilizar o if em conjunto com o switch é muito eficiente e prático