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 especificar 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 passar 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

Os argumentos nomeados são especialmente úteis quando combinados com parâmetros opcionais. Em vez de fornecer todos os valores opcionais anteriores, você pode ir diretamente para aquele de 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}");
}

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

Você pode combinar argumentos posicionais e nomeados, mas os argumentos posicionais devem vir primeiro. Os argumentos nomeados melhoram a legibilidade, especialmente em métodos com vários parâmetros do mesmo tipo ou sinalizadores booleanos cujo significado não é óbvio apenas pelo valor.

challenge icon

Desafio

Fácil

Vamos criar um gerador de relatórios que aproveita argumentos nomeados para tornar as chamadas de métodos totalmente claras. Quando os métodos têm vários parâmetros — especialmente alguns do mesmo tipo ou sinalizadores booleanos — os argumentos nomeados tornam seu código autoexplicativo.

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

  • ReportGenerator.cs: crie uma classe ReportGenerator no namespace Reports com um método que tenha vários parâmetros opcionais:
    • GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)
    • Esse 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 arquivo principal, demonstre o poder dos argumentos nomeados chamando GenerateReport de diferentes maneiras — ignorando os parâmetros opcionais de que você não precisa e especificando apenas os 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 configurações diferentes:

  1. Primeiro relatório: use apenas o título (todos os valores padrão se aplicam)
  2. Segundo relatório: use o título com includeSummary: true e maxPages: 25 (ignore author e includeHeader, mantendo seus valores padrão)
  3. Terceiro relatório: use o título com author: "Admin", includeHeader: false e includeSummary: true (mantenha o valor 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 deverá 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 avançar diretamente para os parâmetros importantes para você — não é necessário especificar author ou includeHeader apenas para alterar includeSummary. Isso torna suas chamadas de métodos muito mais legíveis e revela melhor a intenção!

Experimente você mesmo

using System;
using Reports;

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

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

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

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

        // TODO: Gere o 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
    }
}
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

Pratique por conta própria: Compilador de C# online