Médio PHP

Função com argumentos nomeados e valor padrão

Enunciado

Crie uma função formatarProduto que recebe o nome do produto, o preço e uma moeda (padrão 'R$'). A função deve retornar uma string formatada como "[nome]: [moeda] [preço]", com o preço formatado com duas casas decimais. Use argumentos nomeados na chamada para inverter a ordem dos parâmetros ou omitir a moeda.

Requisitos

  • A função deve se chamar formatarProduto e ter três parâmetros: $nome (string), $preco (float) e $moeda (string, padrão 'R$').
  • Deve retornar a string no formato "Nome: R$ 10.50" (preço com duas casas decimais, usando number_format).
  • Na chamada, use argumentos nomeados para passar preco e nome fora de ordem e para omitir a moeda.

Código inicial

<?php
// Complete a função formatarProduto
function formatarProduto(string $nome, float $preco, string $moeda = 'R$'): string {
    // seu código aqui
}

// Testes
echo formatarProduto(preco: 19.9, nome: 'Caneta') . PHP_EOL;
echo formatarProduto(nome: 'Caderno', preco: 12.5, moeda: 'US$') . PHP_EOL;

Saída esperada

Caneta: R$ 19.90
Caderno: US$ 12.50
Ver dica

Use number_format($preco, 2, '.', '') para formatar o preço. Na chamada, use nome: e preco: para argumentos nomeados.

Mostrar solução
<?php
declare(strict_types=1);

function formatarProduto(string $nome, float $preco, string $moeda = 'R$'): string {
    $precoFormatado = number_format($preco, 2, '.', '');
    return "$nome: $moeda $precoFormatado";
}

echo formatarProduto(preco: 19.9, nome: 'Caneta') . PHP_EOL;
echo formatarProduto(nome: 'Caderno', preco: 12.5, moeda: 'US$') . PHP_EOL;

Passo a passo

  1. Declaramos a função formatarProduto com $nome, $preco e $moeda (padrão 'R$').
  2. Dentro da função, usamos number_format($preco, 2, '.', '') para formatar o preço com duas casas decimais, ponto como separador decimal e sem separador de milhar.
  3. Retornamos a string interpolada com nome, moeda e preço formatado.
  4. Na primeira chamada, usamos argumentos nomeados preco: e nome: para inverter a ordem; a moeda é omitida e assume o padrão 'R$'.
  5. Na segunda chamada, passamos todos os argumentos nomeados, incluindo moeda: 'US$'.
  6. Exibimos os resultados com echo e PHP_EOL.

Por que funciona

Argumentos nomeados permitem associar cada valor ao parâmetro correspondente, independentemente da ordem. Isso é útil quando a função tem muitos parâmetros opcionais ou quando queremos deixar claro o significado de cada valor. O valor padrão de $moeda é usado quando o argumento não é fornecido.

Erros comuns

  • Esquecer o declare(strict_types=1): sem isso, o PHP pode converter tipos automaticamente, mascarando erros. Solução: incluir no topo do arquivo.
  • Passar argumentos posicionais após nomeados: formatarProduto(nome: 'X', 10.0) gera erro fatal. Solução: use todos nomeados ou todos posicionais.
  • Usar number_format sem o terceiro e quarto parâmetros: o padrão usa vírgula como separador decimal (dependendo da localidade). Solução: especificar '.' e '' explicitamente.

Outra forma de resolver

Sem argumentos nomeados, usando a ordem padrão:

echo formatarProduto('Caneta', 19.9) . PHP_EOL;
echo formatarProduto('Caderno', 12.5, 'US$') . PHP_EOL;

Prefira argumentos nomeados para maior clareza, especialmente com muitos parâmetros.

Saída esperada

Caneta: R$ 19.90
Caderno: US$ 12.50