Instruções if e switch - Desmistificando a Certificação SCJP6 Parte VIII - Parte 2
Nesta parte do artigo abordaremos mais operadores e instruções if e switch.
Ao analisar expressões booleanas de modo parecido à instrução if, exceto por: em vez de executar um bloco de código se o resultado do teste for true, ele atribui um valor a uma variável. O operador condicional é um operador ternário.
Essa estrutura é exemplificada abaixo:
package br.devmedia;
System.out.println(9==9?true:false);
System.out.println(9==9?"Java":"Devmedia");
System.out.println(4==9?"Java":"Devmedia");
System.out.println(4==9?"Java":(1==1?true:false));
Há apenas 6 operadores lógicos que você precisa saber para o exame (&, |, ^, &&, || e !). Três destes (&, | e ^) podem ser utilizados como operadores bitwise (bit a bit).
Esses operadores comparam dois literais bit a bit e retornam uma variável cujos bits foram definidos baseados em:
| -> ou um ou outro ligado
^ -> exatamente um ligado
& -> dois bits ligados
Instruções if e switch
As instruções if e loops for, são comuns em quase todas das linguagens de programação.
As instruções switch e if são os tipos de controle de decisão que permitirão ao seu programa agir de modo diferente em uma bifurcação de caminho, dependendo, obviamente, do resultado de um teste lógico.
Expressões válidas para instruções if
As instruções if podem avaliar somente valores booleanos. Note como os parênteses são capazes de subverter a ordem de precedência. O último if é o que, realmente, ilustra a precedência.
int y =6, x=3;
if(((x>4)&&(y<3))|true){
System.out.println("Primeiro "+true);
if(((x>4)&&(y<3))|false){
System.out.println("Segundo "+true);
if((x>4)&&((y<3)|true)){
System.out.println("Terceiro "+true);
if((x>4)&&(y<3)|true){
System.out.println("Quarto "+true);
Primeiro true
O código acima se tornaria ainda mais complexo se você não inserir um conjunto de parênteses, que é o que acontece no quarto if. O terceiro e o quarto ifs produzem o mesmo efeito. A presença dos parênteses é essencial no sentido de se promover clareza e compreensão.
Um erro bastante comum cometido pelos programadores, e que pode ser difícil de identificar, é a atribuição de uma variável booleana quando a intenção seria testá-la.
Atenção com o código a seguir:
if(bool=true){ }
Você pode pensar em uma dessas três hipóteses:
a) O código não será compilado porque é utilizada uma atribuição ao invés de um teste de igualdade.
b) O código será compilado e executado normalmente, mas o teste if falhará porque bool é falso.
c) O código será compilado e executado corretamnete e o teste if será bem sucedido porque bool foi configurado como true em vez de verificar se ele é avaliado como verdadeiro, no argumento da instrução if.
A hipótese c está exata. Não é muito útil, mas correta. Dado que o resultado de qualquer atribuição é igual ao valor da variável incluído após essa atribuição, a expressão bool=true terá como resultado true.
Switch é uma instrução condicional de diversos desvios, isso quer dizer que, de acordo com o resultado de uma condição pode-se executar um desvio entre os vários possíveis.
A instrução switch avalia o valor (literal) resultante de uma expressão ou variável, que chamamos de condição no parágrafo acima e, de acordo com esse valor, que pode ser dos tipos: char, byte, int, short ou um tipo enumerado, desvia a execução dos programas para um dos casos através da palavra chave case.