1
resposta

[Projeto] Uma segunda solução para o IMC usando a estrutura Switch

Olá pessoal boa noite!, bem, primeiro queria agradecer ao instrutor por ter passado esses desafios, eles realmente fizeram eu por meus estudos em prática e ainda me fez pesquisar mais a fundo para utilizar de recursos do PHP para melhorarem o código.

bem aqui está uma outra solução que eu fiz com base nos dados de IMC da OMS que foram apresentados como um extra.

$altura = 1.30;
$peso = 60;
$imc = $peso/$altura ** 2;

$imc = round($imc, $precisao = 1, PHP_ROUND_HALF_UP);

switch ($imc)
{
    case $imc <= 18.5 && $imc:
        echo "Seu IMC é $imc" . " Você está com baixo peso";
    break;

    case $imc >= 18.6 && $imc <= 24.9:
        echo "Seu IMC é $imc" . " Você está com o peso normal";
        break;

    case $imc >= 25 && $imc <= 29.9:
        echo "Seu IMC é $imc" . " Você está com Sobrepeso";
    break;

    case $imc >= 30 && $imc <= 34.9:
        echo "Seu IMC é $imc" . " Você está com Obesidade Grau I";
    break;

    case $imc >= 35 && $imc <= 39.9:
        echo "Seu IMC é $imc " . " Você está com Obesidade Grau II";
    break;

    case $imc >= 40:
        echo "Seu IMC é $imc" . " Você está com Obesidade Grau III";
    break;
}

Bem para quem não está familiarizado com a estrutura switch ela funciona como se fosse um "grande if", então ao invés de usarmos vários "else ifs" para verificar diversas condições, podemos atribuir entre parênteses uma váriavel para ser verificada, e realizar diversas verificações de uma vez com ela. Nesse exemplo eu verifico se $imc está no intervalo de números que eu atribui nos "cases", e dependendo do caso, ele cai em um output do código diferente. No caso dos valores que eu atribui irá cair em Obesidade Grau II, pois o imc atual é de 35.5. é importante lembrar para quem quiser utilizar dessa estrutura que o break; no final dos códigos é essencial para separar os casos, pois se não houver um break ele simplesmente irá ler a linha de baixo.

A leitura da estrutura switch pode ser feita da seguinte forma para facilitar:

$switch ($variavel) case $variavel <= 1: execute a ação; break; case $variavel >= 1: execute outra ação break;

troque a verificação de $variavel, caso a $variavel <= 1, execute a ação e pare o código,

troque verificação de variavel, caso $variavel >= 1, execute outra ação e pare o código

Além disso para nenhum dos casos, (como uma espécie de else para a estrutura switch), podemos declarar default: no final da estrutura e colocar a ação desejada.

Para mais detalhes veja a documentação do PHP: https://www.php.net/manual/en/control-structures.switch.php

Por fim por título de curiosidade utilizei também a função do PHP chamada round, na qual você pode arredondar as casas decimais de um valor, determinar a precisão e escolher se irá arredondar para cima ou para baixo. Não irei entrar em detalhes sobre isso mais para quem ficou curioso dê uma olhada neste link. Porém com uma simples leitura na documentação do PHP é fácil de entender como funciona.

"$imc = round($imc, $precisao = 1, PHP_ROUND_HALF_UP);"

https://www.php.net/manual/en/function.round.php Documentação do PHP

http://www.bosontreinamentos.com.br/php-programming/como-arredondar-numeros-em-php-com-a-funcao-round/ Blog útil sobre o assunto que encontrei.

1 resposta

Olá Leonardo, tudo bem?

Que bom que os desafios propostos pelo curso têm sido úteis para o seu aprendizado em PHP!

Sua solução para o cálculo do IMC utilizando a estrutura switch ficou muito interessante e é uma alternativa eficiente para substituir diversos "else ifs".

Agradeço por compartilhar seu código e explicar como a estrutura funciona, ficou incrível sua explicação!

Espero ter ajudado e bons estudos!