O switch/case é uma estrutura condicional que está presente em várias linguagens de programação. Ela recebe um valor como parâmetro e verifica se ele atende alguma das condições especificadas. Em caso positivo o trecho de código relacionado a essa condição é executado.
Diferente da estrutura if/else, o switch/case avalia apenas condições de igualdade. Ou seja, ela verifica se o valor recebido como parâmetro é igual a alguma das opções especificadas em seu corpo. Esse comportamento equivale à utilização de vários if/else em sequência, porém com uma sintaxe mais enxuta e de fácil leitura.
Tópicos
Sintaxe
Abaixo é possível ver a sintaxe da estrutura switch/case. Ela inicia recebendo uma expressão como parâmetro e em seguida são feitas verificações para saber se ela corresponde a algum dos valores especificados:
switch (expressão) { case valor1: //código a ser executado se a expressão for igual ao valor1 break; case valor2: //código a ser executado se a expressão for igual ao valor2 break; case valorN: //código a ser executado se a expressão for igual ao valorN break; }
- Linha 1: O parâmetro do switch/case deve estar entre parênteses e pode ser tanto uma variável quanto um método ou expressão;
- Linhas 2, 5 e 8: A palavra reservada case seguida de um valor (numérico, string, etc) verifica se a expressão recebida como parâmetro é igual a esse valor. Se for, o trecho de código entre o case e o break logo abaixo será executado;
- Linhas 3, 6 e 9: Os trechos de código entre o case e o break são executados caso a condição especificada no case seja atendida. Aqui pode haver várias linhas de código sem a necessidade de uso de chaves para delimitar o bloco;
- Linhas 4, 7 e 10: O comando break faz com que a verificação seja encerrada caso a condição do case equivalente seja atendida. Isso faz com as demais condições não sejam avaliadas, pois como se trata de comparações de igualdade, apenas uma delas será atendida.
Cases agrupados
Caso um mesmo trecho de código deva ser executado para diferentes condições é possível agrupar os cases, da seguinte forma:
switch (expressão) { case valor1: case valor2: case valor3: //primeiro código break; case valor3: //segundo código break; }
- Linhas 2 e 3: Note que os dois primeiros case não possuem o comando break. Isso faz com que o fluxo do código passe para a próxima verificação até encontrar um break. Neste caso, se o valor da expressão for 0 ou 1 o código seguirá e executará o trecho referente ao case 2. Em seguida o break da linha 6 encerrará o fluxo do switch.
Default
Dentro do switch também é possível especificar um trecho de código que deve ser executado no caso de nenhuma das condições ser atendida. Para esse caso temos o comando default, que deve ser adicionado após todos os case, da seguinte forma:
switch (expressão) { case valor1: //código referente ao valor1 break; case valor2: //código referente ao valor2 break; case valorN: //código referente ao valorN break; default: //código caso nenhuma condição seja atendida break; }
- Linhas 11 a 13: A estrutura do default é semelhante à do case, porém esse comando não recebe nenhum valor. Ele será executado caso nenhuma das condições anteriores seja atendida.
Exemplo prático
No código abaixo podemos ver um exemplo prático de uso da estrutura switch/case. Nele temos um sistema simples de sorteio simulando um jogo de tabuleiro em que cada número representa uma ação:
$sorteio = rand(0,5); switch($sorteio){ case 0: echo "Você perdeu a vez"; break; case 1: echo "Avance 1 casa"; break; case 2: echo "Você ganhou um bônus! Avance 3 casas"; break; default: echo "Jogue novamente"; break; }
- Linha 1: A variável $sorteio recebe um valor aleatório entre 0 e 5;
- Linha 3: Por meio do switch verificamos a variável $sorteio a fim de executar um procedimento para cada valor possível;
- Linhas 4 a 12: Verificamos se o valor sorteado foi 0, 1 ou 2 e para cada situação imprimimos uma mensagem específica;
- Linhas 13 a 15: Caso o valor sorteado não seja 0, 1 ou 2 imprimimos uma mensagem padrão.