Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: separe em funções

Nesta aula, aprendemos a criar e utilizar funções, inclusive definindo seus tipos nos parâmetros e retorno.
Agora é sua vez! Chegou a hora de você separar e organizar seu código em funções utilizando PHP.

Opinião do instrutor

Opções
Crie uma função que exibe uma mensagem informando se um filme é lançamento ou não;
Crie a função responsável por determinar se um filme está ou não incluído no plano;
Adicione os tipos corretos nos parâmetros e retorno das funções recém-criadas.

2 respostas
solução!

Olá, segue o código alterado com as solicitações.

<?php

function exibirMensagemAnoDeLancamento(int $ano): void {
    if ($ano > 2022) {
        echo "Esse filme é um lançamento\n";
    } elseif ($ano > 2020 && $ano <= 2022) {
        echo "Esse filme ainda é novo\n";
    } else {
        echo "Esse filme não é um lançamento\n";
    }
}

function inclusoNoPlano(bool $planoPrime, int $anoLancamento) {
    return $planoPrime || $anoLancamento < 2020;
}


echo "Bem-vindo(a) ao screen match! \n";

$nomeFilme = "Top Gun - Maverick";
$anoLancamento = 2022;
$notaFilme = 8.8;
$inclusoNoPlano = true;
$quantidadeDeNotas = $argc - 1;
$notas = [];
$somaDeNotas = 0.0;

for ($contador = 1; $contador < $argc; $contador++) {
    $somaDeNotas += $argv[$contador];
}

$notaFilme =  $somaDeNotas / $quantidadeDeNotas;
$planoPrime = true;

$incluidoNoPlano = inclusoNoPlano($planoPrime, $anoLancamento);

echo "Nome do filme: " . $nomeFilme . "\n";
echo "Nota do filme: " . $notaFilme . "\n";
echo "Ano de Lançamento: " . $anoLancamento . "\n";

exibirMensagemAnoDeLancamento($anoLancamento);

$genero = match ($nomeFilme) {
    "Top Gun - Maverick" => "ação\n",
    "Thor: Ragnarok" => "super-Herói\n",
    "Se beber não case" => "comédia\n",
    default => "Generô não identificado \n",
};

echo "O gênero do filme é: " . $genero;

Oii, Eliel! Tudo bem por aí?

Parabéns por concluir mais essa etapa e organizar o seu código utilizando funções! O seu script ficou bem legal e cumpre muito bem com os objetivos propostos pelo exercício.

Gostaria de destacar alguns pontos bem legais da sua solução:

  • Tipagem estrita e declaração de retorno: A função exibirMensagemAnoDeLancamento utilizou corretamente a tipagem no parâmetro e especificou o void no retorno, o que deixa o código mais previsível e profissional.
  • Regras de negócio: A lógica para verificar o ano de lançamento e definir se o filme está incluído no plano ficou direta e muito fácil de ler.
  • Uso de argumentos da linha de comando: Aproveitar o uso de $argc e $argv para calcular a média das notas dinamicamente mostra que você está explorando bem as possibilidades da linguagem.

Como ponto de melhoria para evoluir ainda mais, vale notar que a segunda função (inclusoNoPlano) ficou sem a tipagem explícita de retorno na assinatura. Para manter o padrão do que você fez na primeira função e garantir a clareza do código, você poderia adicionar : bool logo após os parênteses dos parâmetros.

Para continuarmos a troca de ideias sobre organização de código: Quais foram os maiores desafios que você encontrou ao passar um código linear para uma estrutura baseada em funções?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!