Aula 05 - Estruturas Condicionais - switch.

article featured image

Na aula anterior aprendemos a utilizar if, else e elseif para fazer com que um programa tome decisões.

Por exemplo:

Mas existem situações em que não queremos verificar intervalos ou condições complexas. Queremos simplesmente comparar o mesmo valor com várias possibilidades.

Imagine que temos uma variável com o número do dia da semana:

$dia = 3;

e pretendemos apresentar:

Poderíamos resolver o problema utilizando vários elseif, mas o PHP disponibiliza uma estrutura especialmente adequada a este tipo de situação: o switch.

 

1. Quando existem várias possibilidades

Considere:

$dia = 3;

Utilizando apenas aquilo que já conhecemos, poderíamos escrever:

Funciona corretamente.

No entanto, estamos constantemente a comparar a mesma variável:

$dia

com diferentes valores:

Nestes casos podemos utilizar switch.

 

2. A estrutura switch

A estrutura básica é:

O switch analisa o valor da variável e procura um case correspondente.

 

3. Primeiro exemplo

Vamos reescrever o exemplo anterior:

Como:

$dia = 3

o PHP encontra:

case 3:

e executa:

echo "Quarta-feira";

Resultado:

Quarta-feira

 

4. Como funciona o switch?

Podemos imaginar o processo desta forma:

O PHP compara o valor analisado com os diferentes case.

Quando encontra uma correspondência, executa as instruções associadas.

 

5. O que é case?

Cada case representa uma das possibilidades.

Podemos interpretar como:

Caso o valor seja 1, apresenta "Segunda-feira".

Outro exemplo:

significa:

Caso o valor seja 5, apresenta "Sexta-feira".

 

6. Para que serve break?

Observe:

O break indica que o PHP deve sair do switch depois de executar esse case.

É uma instrução muito importante.

Considere este código:

O resultado será:

Editar

Depois de executar o case 2, o break termina o switch.

 

7. O que acontece se esquecermos o break?

Considere:

O PHP encontra:

case 2:

e apresenta:

Editar

Mas, como não existe break, continua para o próximo case.

Resultado:

Este comportamento chama-se fall-through.

Por enquanto, vamos adotar como regra:

Sempre que terminarmos um case, colocamos break, exceto quando pretendemos deliberadamente que a execução continue para o case seguinte.

 

8. O default

E se nenhum dos valores corresponder?

Considere:

$dia = 9;

Não existe:

case 9:

É aqui que utilizamos:

default:

Exemplo:

Resultado:

Dia inválido

O default desempenha um papel semelhante ao else.

Podemos pensar:

Não são exatamente a mesma estrutura, mas esta comparação ajuda a compreender a função de cada elemento.

 

9. O switch também pode trabalhar com texto

Os case não têm de ser números.

Por exemplo:

Resultado:

A encomenda foi enviada.

Este exemplo aproxima-nos de situações que poderemos encontrar mais tarde numa aplicação ligada a uma base de dados.

 

10. Exemplo — Menu de uma aplicação

Imagine que o utilizador escolheu uma opção:

$opcao = 3;

Temos:

Podemos escrever:

Para:

$opcao = 3;

obtemos:

Editar registo

 

11. Vários case com a mesma ação

Por vezes vários valores devem produzir o mesmo resultado.

Imagine:

Podemos escrever:

Para:

$dia = 6;

obtemos:

Fim de semana

 

12. if...elseif ou switch?

Esta é a parte que considero mais importante da aula.

As duas estruturas permitem tomar decisões, mas não são adequadas exatamente às mesmas situações.

if...elseif

É especialmente útil quando trabalhamos com:

  • intervalos;
  • comparações diferentes;
  • operadores >, <, >=, <=;
  • várias condições combinadas;
  • && e ||.

Exemplo:

Aqui estamos a trabalhar com intervalos de valores.

O if...elseif é a escolha mais natural.

 

switch

É particularmente útil quando queremos comparar uma expressão com vários valores concretos.

Por exemplo:

Neste caso:

switch ($opcao) {

torna o código mais organizado.

 

13. Escolher a estrutura adequada

Considere estes problemas.

Situação A

Se a idade for igual ou superior a 18, apresentar "Maior de idade".

Melhor escolha:

if

porque estamos a utilizar:

>=

 

Situação B

Dependendo do número 1, 2, 3 ou 4, apresentar uma opção diferente.

Melhor escolha:

switch

porque estamos a comparar o mesmo valor com várias possibilidades concretas.

 

Situação C

Média >= 18, >= 14, >= 10 ou inferior a 10.

Melhor escolha:

if / elseif / else

porque existem intervalos.

 

Situação D

Estado = "pendente", "pago", "enviado" ou "entregue".

Uma boa escolha:

switch

porque temos valores específicos.

 

14. Nem tudo deve ser transformado num switch

Não devemos utilizar uma estrutura apenas porque acabámos de a aprender.

Por exemplo:

$stock = 7;

Queremos saber:

stock > 0?

A solução natural continua a ser:

O objetivo não é substituir o if.

O objetivo é saber qual a ferramenta mais adequada para cada problema.

 

15. Exemplo completo — Estado de uma encomenda

Considere:

Podemos criar:

Alterando apenas:

$estado = "enviado";

a página passa a apresentar:

A encomenda está a caminho.

Mais uma vez, os dados mudam e o programa adapta o comportamento.

 

16. Consolidar if, elseif e else

Antes de terminar a matéria das condições, vamos rever uma situação um pouco mais complexa.

Imagine:

Queremos:

Podemos resolver:

Repare que não precisamos obrigatoriamente de criar condições aninhadas.

À medida que ganhamos experiência, devemos procurar soluções simples e fáceis de compreender.

Post Anterior