Ser Programador

Swicth Condicional

Aprendendo como utilizar o switch condicional ao invés do elseif convencional


No PHP existe uma maneira muito interessante de programar estruturas condicionais. Estou falando do switch.

A utilização do switch para blocos condicionais de várias condições ao invés de elseif's repetitivos deixa seu código muito mais limpo, bonito e de qualidade.

A questão é:

Como trabalhar com expressões no switch?



Antes de mais nada, vamos relembrar um pouco a sintaxe do switch:

		switch(4){
        	case 1:
            	$result = 'O valor é 1';
            	break;
            case 2:
            	$result = 'O valor é 2';
            	break;
            case 3:
            	$result = 'O valor é 3';
            	break;
            case 4:
	            $result = 'O valor é 4';
            	break;
            default:
            	$result = 'Não foi encontrado';
		}
        echo $result;
    

Para o código acima, como sabemos, o resultado será "O valor é 4".



Podemos também trabalhar com cálculos (expressões) dentro dos cases. Vejamos um exemplo:

		switch(4){
        	case (1+1):
            	$result = 'O valor casa com 1+1';
            	break;
            case (2+1):
            	$result = 'O valor casa com 2+1';
            	break;
            case (3+1):
            	$result = 'O valor casa com 3+1';
            	break;
            case (4+1):
	            $result = 'O valor casa com 4+1';
            	break;
            default:
            	$result = 'Não casou';
		}
        echo $result;
    

Neste caso, o resultado será "O valor casa com 3+1", tendo em vista que 3 + 1 é igual a 4 (exatamente o valor que estamos passando para o witch).



Vamos agora lembrar um pouco dos retornos de expressão em booleanos (true/false).

Quando utilizamos o seguinte código:

    	var_dump(5>=4);
    

Nos será retornado bool(true), ou seja, verdadeiro, porque 5 é maior que 4.


Logicamente se efetuarmos o contrário:

    	var_dump(5<=4);
    

Nos será retornado bool(false), ou seja, falso, porque 5 não é maior que 4.



Tendo essa lógica em vista podemos então concluir que para toda condição será retornado verdadeiro ou falso, assim como acontece em expressões na cláusula if e elseif.

Com esse conhecimento e sabendo também que é possível trabalhar com expressões nos cases do switch, basta então passarmos para o switch um valor booleano de comparação e efetuar normalmente nos cases nossas verificações.

Vejamos um exemplo então:

		switch(true){
        	case (1>=4):
            	$result = '1 é maior ou igual a 4';
            	break;
            case (2>=4):
            	$result = '2 é maior ou igual a 4';
            	break;
            case (3>=4):
            	$result = '3 é maior ou igual a 4';
            	break;
            case (4>=4):
	            $result = '4 é maior ou igual a 4';
            	break;
            default:
            	$result = 'Não casou';
		}
        echo $result;
    

Sendo assim, o resultado será "4 é maior ou igual a 4" porque a expressão 4>=4 retorna true, que é o valor que passamos no swicth.


Para concluir, vejamos um exemplo inverso:

		switch(false){
        	case (1<=4):
            	$result = '1 é menor ou igual a 4';
            	break;
            case (2<=4):
            	$result = '2 é menor ou igual a 4';
            	break;
            case (3<=4):
            	$result = '3 é menor ou igual a 4';
            	break;
            case (4<=4):
	            $result = '4 é menor ou igual a 4';
            	break;
            case (5<=4):
	            $result = '5 é menor ou igual a 4';
            	break;
            default:
            	$result = 'Não casou';
		}
        echo $result;
    

Como já era de se esperar, o resultado será "5 é menor ou igual a 4", porque a expressão 5<=4 retorna false, que é o valor que passamos no swicth.



Lembrando que é possível utilizar qualquer tipo de operador lógico ou de comparação nas expressões dos cases, da mesma forma que fazemos com if's e elseif's.