Menu
Coddy logo textTech

Argumentos Nomeados

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

Argumentos nomeados permitem que você especifique qual parâmetro recebe um valor usando seu nome, em vez de depender da posição. Isso torna as chamadas de método mais claras e permite que você passe argumentos em qualquer ordem.

Use o nome do parâmetro seguido por dois pontos antes do valor:

public static void CreateUser(string name, int age, bool isActive)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

// Usando argumentos nomeados
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob");  // Qualquer ordem funciona

Argumentos nomeados brilham quando combinados com parâmetros opcionais. Em vez de fornecer todos os valores opcionais precedentes, você pode pular diretamente para aquele que precisa:

public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
    Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}

// Pula port e useSSL, especifica apenas timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);

Você pode misturar argumentos posicionais e nomeados, mas os argumentos posicionais devem vir primeiro. Argumentos nomeados melhoram a legibilidade, especialmente para métodos com múltiplos parâmetros do mesmo tipo ou sinalizadores (flags) booleanos onde o significado não é óbvio apenas pelo valor.

challenge icon

Desafio

Fácil

Vamos construir um gerador de relatórios que aproveita os argumentos nomeados para tornar as chamadas de método cristalinas. Quando os métodos têm múltiplos parâmetros - especialmente aqueles do mesmo tipo ou sinalizadores booleanos - os argumentos nomeados tornam seu código autodocumentado.

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

  • ReportGenerator.cs: Crie uma classe ReportGenerator no namespace Reports com um método que possui vários parâmetros opcionais:
    • GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)
    • Este método deve retornar uma string formatada descrevendo a configuração do relatório
    • Formato: Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
  • Program.cs: No seu arquivo principal, demonstre o poder dos argumentos nomeados chamando GenerateReport de diferentes maneiras - pulando parâmetros opcionais que você não precisa e especificando apenas aqueles que importam para cada relatório.

Você receberá três entradas:

  • Título do primeiro relatório
  • Título do segundo relatório
  • Título do terceiro relatório

Gere três relatórios com diferentes configurações:

  1. Primeiro relatório: Use apenas o título (todos os padrões se aplicam)
  2. Segundo relatório: Use o título com includeSummary: true e maxPages: 25 (pule author e includeHeader, mantendo seus padrões)
  3. Terceiro relatório: Use o título com author: "Admin", includeHeader: false e includeSummary: true (mantenha o padrão de maxPages)

Imprima o resultado de cada relatório em sua própria linha.

Por exemplo, se as entradas forem Sales Q1, Annual Review e Inventory Check, a saída deve ser:

Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10

Observe como os argumentos nomeados permitem que você pule diretamente para os parâmetros que lhe interessam - você não precisa especificar author ou includeHeader apenas para alterar includeSummary. Isso torna suas chamadas de método muito mais legíveis e reveladoras de intenção!

Folha de consulta

Argumentos nomeados permitem que você especifique qual parâmetro recebe um valor usando seu nome, em vez de depender da posição. Isso torna as chamadas de método mais claras e permite que você passe argumentos em qualquer ordem.

Use o nome do parâmetro seguido por dois pontos antes do valor:

public static void CreateUser(string name, int age, bool isActive)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

// Usando argumentos nomeados
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob");  // Qualquer ordem funciona

Argumentos nomeados funcionam bem com parâmetros opcionais. Você pode pular diretamente para o parâmetro que precisa sem fornecer todos os valores opcionais precedentes:

public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
    Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}

// Pula port e useSSL, especifica apenas timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);

Você pode misturar argumentos posicionais e nomeados, mas os argumentos posicionais devem vir primeiro. Argumentos nomeados melhoram a legibilidade, especialmente para métodos com múltiplos parâmetros do mesmo tipo ou sinalizadores (flags) booleanos.

Experimente você mesmo

using System;
using Reports;

class Program
{
    public static void Main(string[] args)
    {
        // Lê os três títulos dos relatórios
        string title1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string title3 = Console.ReadLine();

        // Cria uma instância de ReportGenerator
        ReportGenerator generator = new ReportGenerator();

        // TODO: Gerar o primeiro relatório - use apenas o título (todos os padrões se aplicam)
        

        // TODO: Gerar o segundo relatório - use o título com includeSummary: true e maxPages: 25
        // (pule author e includeHeader, mantendo seus padrões)
        

        // TODO: Gerar o terceiro relatório - use o título com author: "Admin", includeHeader: false e includeSummary: true
        // (mantenha o padrão de maxPages)
        

        // Imprime o resultado de cada relatório
    }
}
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