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 funcionaOs 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.
Desafio
FácilVamos 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 classeReportGeneratorno namespaceReportscom 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 chamandoGenerateReportde 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:
- Primeiro relatório: use apenas o título (todos os valores padrão se aplicam)
- Segundo relatório: use o título com
includeSummary: trueemaxPages: 25(ignore author e includeHeader, mantendo seus valores padrão) - Terceiro relatório: use o título com
author: "Admin",includeHeader: falseeincludeSummary: 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: 10Observe 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
}
}
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
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de MétodosPratique por conta própria: Compilador de C# online