Menu
Coddy logo textTech

A Palavra-chave 'params'

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 47 de 70.

A palavra-chave params permite que um método aceite um número variável de argumentos do mesmo tipo. Em vez de exigir que os chamadores criem um array manualmente, eles podem passar argumentos diretamente, separados por vírgulas.

Coloque params antes de um parâmetro de array na assinatura do método:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Todas essas chamadas funcionam
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (array vazio)

O compilador envolve automaticamente os argumentos em um array. Você também pode passar um array existente diretamente se já tiver um:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Existem algumas regras a serem lembradas: um método pode ter apenas um parâmetro params e ele deve ser o último parâmetro na lista. Você pode combiná-lo com parâmetros regulares:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

A palavra-chave params torna as APIs mais flexíveis e amigáveis para quem as chama, e é por isso que você a vê em métodos como Console.WriteLine e string.Format.

challenge icon

Desafio

Fácil

Vamos construir um formatador de mensagens flexível que utiliza a palavra-chave params para lidar com qualquer número de valores. Você criará uma classe utilitária que pode formatar mensagens com argumentos variáveis, demonstrando como o params torna os métodos mais versáteis e amigáveis para quem os chama.

Você organizará seu código em dois arquivos:

  • MessageFormatter.cs: Crie uma classe MessageFormatter no namespace Formatting com dois métodos que usam params:
    • Combine(params string[] parts) - junta todas as strings fornecidas com um espaço entre elas e retorna o resultado
    • FormatList(string label, params int[] numbers) - combina um parâmetro regular com um array params. Ele deve retornar o rótulo seguido por dois pontos, e então todos os números separados por vírgulas (ex: Scores: 85, 90, 78)
  • Program.cs: No seu arquivo principal, demonstre ambos os métodos com entradas. Leia uma string de rótulo e, em seguida, leia uma linha de números inteiros separados por vírgulas. Use Combine para juntar três palavras fixas e use FormatList para exibir o rótulo com os números.

Você receberá duas entradas:

  • Uma string de rótulo (ex: Scores)
  • Uma lista de números inteiros separados por vírgulas (ex: 85,90,78,92)

Primeiro, chame Combine com as palavras "Hello", "params" e "world!" e imprima o resultado. Em seguida, analise os inteiros separados por vírgulas em um array e chame FormatList com o rótulo e o array de inteiros, imprimindo esse resultado também.

Por exemplo, se as entradas forem Scores e 85,90,78, a saída deve ser:

Hello params world!
Scores: 85, 90, 78

Observe como o Combine aceita qualquer número de strings diretamente, enquanto o FormatList mostra que você pode misturar parâmetros regulares com params - o parâmetro params só precisa vir por último. Você também pode passar um array existente para um método params, que é exatamente o que você fará com os inteiros analisados!

Folha de consulta

A palavra-chave params permite que um método aceite um número variável de argumentos do mesmo tipo sem exigir que os chamadores criem um array manualmente:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Todas estas chamadas funcionam
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (array vazio)

Você pode passar um array existente diretamente para um método params:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Regras para params:

  • Um método pode ter apenas um parâmetro params
  • Ele deve ser o último parâmetro na lista
  • Pode ser combinado com parâmetros regulares
public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Experimente você mesmo

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // Lê as entradas
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: Use MessageFormatter.Combine com "Hello", "params", e "world!"
        // e imprima o resultado
        
        
        // TODO: Converta os inteiros separados por vírgula em um array de int
        // Dica: Divida a string e converta cada parte para int
        
        
        // TODO: Use MessageFormatter.FormatList com o label e o array de int
        // e imprima o resultado
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos