Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como melhorar esse código?

Olá a todos!

O meu desafio era criar um código que pudesse Ler um número inteiro entre 1 e 12 e escrever o mês correspondente. Caso o número seja fora desse intervalo, informar que não existe mês com este número!

Eu fiz e deu certo com o código abaixo. Mas eu achei muito grande e monótono. Teria uma maneira melhor de resolver o desafio?

Desde já, agradeço por quaisquer contribuições.

<?php

/Ler um número inteiro entre 1 e 12 e escrever o mês correspondente. Caso o número seja fora desse intervalo, informar que não existe mês com este número/

print"<h1> Número referente ao mês </h1><br><br>

        Escolha um número de 01 a 12 e veja a qual mês ele é correspondente: <br><br>

            <form method = 'POST' action = ''>

                <input type = 'number' name = 'n1'> <br><br>

                <input type = 'submit' name = 'Enviar'>

            </form>
";

            $n1 = $_POST['n1'];

                switch($n1){

                    case 1:
                        echo"O número $n1 representa o mês de Janeiro";
                        break;

                    case 2:
                        echo"O número $n1 representa o mês de Fevereiro";
                        break;

                    case 3:
                        echo "O número $n1 representa o mês de Março";
                        break;

                    case 4:
                        echo "O número $n1 representa o mês de Abril";
                        break;

                    case 5:
                        echo"O número $n1 representa o mês de Maio";
                        break;

                    case 6:
                        echo "O número $n1 representa o mês de Junho";
                        break;

                    case 7:
                        echo "O número $n1 representa o mês de Julho";
                        break;

                    case 8:
                        echo "O número $n1 representa o mês de Agosto";
                        break;

                    case 9:
                        echo "O número $n1 representa o mês de Setembro";
                        break;

                    case 10:
                        echo "O número $n1 representa o mês de Outubro";
                        break;

                    case 11:
                        echo "O número $n1 representa o mês de Novembro";
                        break;

                    case 12:
                        echo "O número $n1 representa o mês de Dezembro";
                        break;

                    default:
                        echo "O número $n1 não corresponde a nenhum mês.";
                }
3 respostas
solução!

Oi Matheus, beleza?

Abaixo segue uma solução que fiz. Não considero a melhor, porém, é bem didática para quem está começando.

A ideia é basicamente armazenar os meses em um array e pegar o índice correspondente. Você pode modificar o código para representar os meses com alguma estrutura de dados melhor que o array, mas acho que dessa forma atende bem ao seu propósito.

$meses = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];

function mesCorrespondenteDoNumero(int $numero, array $meses) :string
{   
    if(!isset($meses[$numero-1]))
    {
        throw new Exception('Não existe mês correspondente');
    }

    return $meses[$numero-1];
}

// exemplo de execução do código
try {
    echo mesCorrespondenteDoNumero(13, $meses);
} catch (Exception $e) {
    echo $e->getMessage();
}

Qualquer dúvida em relação ao código pode me perguntar.

Bons estudos.

Muito obrigado!

Em toda minha trajetória com php, eu nunca vi o cnceito de Exception. Mas imagino que eu deva aprender se eu seguir com a formação, correto?

Em toda minha trajetória com php, eu nunca vi o cnceito de Exception. Mas imagino que eu deva aprender se eu seguir com a formação, correto?

Sim, tem cursos aqui na Alura sobre Exceptions. Se quiser você pode trocar esse trecho do código por alguma outra mensagem.

Não esqueça de marcar a solução para o tópico ser encerrado.

Bons estudos.