Menu
Coddy logo textTech

Argumentos con nombre

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy. Lección 49 de 70.

Los argumentos con nombre te permiten especificar qué parámetro recibe un valor utilizando su nombre, en lugar de depender de la posición. Esto hace que las llamadas a métodos sean más claras y te permite pasar argumentos en cualquier orden.

Usa el nombre del parámetro seguido de dos puntos antes del valor:

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

// Usando argumentos con nombre
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob");  // Cualquier orden funciona

Los argumentos con nombre son especialmente útiles cuando se combinan con parámetros opcionales. En lugar de proporcionar todos los valores opcionales anteriores, puedes ir directamente al que necesitas:

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

// Omitir port y useSSL, solo especificar timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);

Puedes mezclar argumentos posicionales y con nombre, pero los argumentos posicionales deben ir primero. Los argumentos con nombre mejoran la legibilidad, especialmente en métodos con varios parámetros del mismo tipo o indicadores booleanos cuyo significado no es evidente solo por el valor.

challenge icon

Desafío

Fácil

Construyamos un generador de informes que aproveche los argumentos con nombre para que las llamadas a métodos sean completamente claras. Cuando los métodos tienen varios parámetros, especialmente algunos del mismo tipo o indicadores booleanos, los argumentos con nombre hacen que tu código se explique por sí mismo.

Organizarás tu código en dos archivos:

  • ReportGenerator.cs: Crea una clase ReportGenerator en el espacio de nombres Reports con un método que tenga varios parámetros opcionales:
    • GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)
    • Este método debe devolver una cadena con formato que describa la configuración del informe
    • Formato: Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
  • Program.cs: En tu archivo principal, demuestra el poder de los argumentos con nombre llamando a GenerateReport de distintas maneras: omite los parámetros opcionales que no necesitas y especifica únicamente los relevantes para cada informe.

Recibirás tres entradas:

  • Título del primer informe
  • Título del segundo informe
  • Título del tercer informe

Genera tres informes con distintas configuraciones:

  1. Primer informe: Usa únicamente el título (se aplican todos los valores predeterminados)
  2. Segundo informe: Usa el título con includeSummary: true y maxPages: 25 (omite author e includeHeader, conservando sus valores predeterminados)
  3. Tercer informe: Usa el título con author: "Admin", includeHeader: false e includeSummary: true (conserva el valor predeterminado de maxPages)

Imprime el resultado de cada informe en su propia línea.

Por ejemplo, si las entradas son Sales Q1, Annual Review e Inventory Check, la salida debería 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

Observa cómo los argumentos con nombre te permiten saltar directamente a los parámetros que te interesan: no tienes que especificar author ni includeHeader solo para cambiar includeSummary. ¡Esto hace que tus llamadas a métodos sean mucho más legibles y revelen claramente su intención!

Pruébalo tú mismo

using System;
using Reports;

class Program
{
    public static void Main(string[] args)
    {
        // Lee los tres títulos de los informes
        string title1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string title3 = Console.ReadLine();

        // Crea una instancia de ReportGenerator
        ReportGenerator generator = new ReportGenerator();

        // TODO: Genera el primer informe - usa solo el título (se aplican todos los valores predeterminados)
        

        // TODO: Genera el segundo informe - usa el título con includeSummary: true y maxPages: 25
        // (omite author e includeHeader, manteniendo sus valores predeterminados)
        

        // TODO: Genera el tercer informe - usa el título con author: "Admin", includeHeader: false e includeSummary: true
        // (mantén el valor predeterminado de maxPages)
        

        // Imprime el resultado de cada informe
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C# online