Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia O switch no PHP O switch funciona como uma série de if juntos, mais sobre as estruturas de controle if, else e elseif podem ser encontradas no artigo anterior, testando valores para uma variável ou expressão. No entanto o switch trabalha basicamente com o operador de igualdade. Então em casos que devemos testar se nossa variável, ou expressão, é igual a uma série de valores, o switch é uma boa saída. Vamos agora ver um problema para entendermos melhor o switch. Problema Em um programa de televisão o expectador deve escolher números de 1 a 5 para um sorteio de prêmios, em que cada número representa um prêmio. Então faremos: 1. Ler a entrada, o número que o expectador escolheu 2. De acordo com o número que o expectador escolheu retornar um prêmio 3. Se escolher um número que não seja de 1 a 5 retornar uma mensagem de erro. O diagrama de blocos Observe como seria a representação do nosso problema no diagrama de blocos. Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia O símbolo de início e entrada de dados não são novidades afinal foram abordados no artigo sobre o algoritmo e diagrama de blocos no PHP, no entanto o símbolo seguinte nos diz que iremos comparar o valor contido nele com os símbolos de decisões seguintes. E como já foi falado no artigo anterior utilizamos as setas para indicar a direção do processamento. Como você pode observar no diagrama será testado cada um dos valores se não for verdadeiro o próximo será testado até o último, chegando no ultimo se nem o último for verdadeiro executamos o default, equivalente a um else. No PHP O nosso problema poderia ser resolvido apenas utilizando as estruturas de controle if, else e elseif que aprendemos no artigo anterior. Antes de ver o código abaixo tente resolver o nosso problema apenas com as estruturas de controle que aprendemos até este ponto. Conseguiu? Veja um exemplo de como poderia ser resolvido utilizando apenas if, else e elseif: Não foi muito difícil de resolver né? No entanto observe o código comparamos sempre a variável $numero a um valor de 1 a 5 e retornávamos uma $mensagem, e se não fosse de 1 a 5 retornaríamos que ele não ganhou nada. Se estamos sempre comparando uma variável, ou expressão se são iguais a uma série de valores talvez seja à hora de trocarmos de estrutura de controle. Ao utilizarmos o switch informamos a variável ou expressão que será testada em cada uma das cláusulas (case) até que seja encontrada uma cláusula em que seja verdadeira. Quando isto ocorre às instruções dentro do bloco de código da estrutura case é executado até encontrar a instrução break, falaremos mais sobre break quando chegarmos aos loops no PHP, se nenhuma cláusula for verdadeira a instrução default será executada. Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia Voltaremos a falar sobre a instrução break posteriormente, no entanto até este momento você só deve ter em mente que se ela não for inserida seria como se não fechássemos a instrução case. Observe o exemplo abaixo mesmo passando um valor e ele for verdadeiro todas as expressões abaixo do valor escolhido são executadas e como atribuímos um valor a variável o que prevalece é da ultima, odefault, por este motivo devemos sempre utilizar a instrução break. Agora que sabemos o porquê do break, podemos o aproveitar de uma maneira, por exemplo, se em nosso problema caso a pessoa escolhesse 2 ou 3 o prêmio seria o Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia mesmo. Poderíamos apenas mudar o valor da variável mensagem para eles ficarem iguais, no entanto estaríamos nos repetindo o que não é legal, pois sempre que tivéssemos que alterar em um teríamos que lembrar de alterar no outro por isso. O melhor mesmo é fazer da seguinte forma: Como o valor que seria mantido era o da cláusula 3 apenas retiramos as instruções da 2 e não colocamos break na cláusula 2 sendo assim ela seria a mesma que a 3 esta sim tendo a instrução break como as demais. Em relação a estrutura de controle switch: A variável ou expressão a ser avaliada é declarada no inicio do switch Expressões são realizadas por operadores lógicos e operadores de comparação O bloco de código referente a estrutura de controle deve ser delimitado por chaves {} Endente o código referente ao bloco em 4 espaços por questões de legibilidade, a como configurar o seu editor de texto para transformar Tabs em espaços Cada cláusula (case) possui um valor a ser comparado e logo após o valor são adicionado 2 pontos (:) dando inicio a clausula Após os 2 pontos o bloco de código que devera ser executado para aquela cláusula Finalizamos a cláusula com o break Caso tenhamos 2 ou mais valores que executarão o mesmo bloco de código não definimos o break apenas no ultimo em que for inserido o bloco de código, ver o exemplo anterior Após todas as cláusulas podemos adicionar uma cláusula default que será executada caso todas as outras não tenham sido verdadeiras A cláusula default não necessita de break, afinal ela é inserida após todas as outras Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia Exercício 1. O cardápio de uma casa de lanches é dado pela tabela abaixo: Código 100 101 102 103 104 105 Produto Cachorro quente Bauru Simples Bauru com ovo Hamburguer Cheeseburguer Refrigerante Preço Unitário (R$) R$ 1,70 R$ 2,30 R$ 2,60 R$ 2,40 R$ 2,50 R$ 1,00 Escreva um programa que leia o código do item adquirido pelo consumidor e a quantidade, calculando e mostrando o valor a pagar. Não será necessário exibir o produto e o valor, somente o valor final. 2. Um determinado clube de futebol pretende classificar seus atletas em categorias e para isto ele contratou um programador para criar um programa que executasse esta tarefa. Para isso o clube criou uma tabela que continha a faixa etária do atleta e sua categoria. A tabela está demonstrada abaixo: IDADE CATEGORIA De 05 a 10 Infantil De 11 a 15 Juvenil De 16 a 20 Junior De 21 a 25 Profissional Construa um programa que solicite o nome e a idade de um atleta e imprima a sua categoria. 3. Leia o código de um determinado produto e mostre sua classificação. Utilize a seguinte tabela como referência: Código 1 2,3 ou 4 5 ou 6 7 8 até 15 Qualquer outro código Classificação Alimento não-perecível Alimento perecível Vestuário Higiene Pessoal Limpeza e Utensílios Domésticos Código inválido