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 le 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 los métodos sean más claras y le 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 destacan cuando se combinan con parámetros opcionales. En lugar de proporcionar todos los valores opcionales precedentes, puedes saltar directamente al que necesites:

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 para métodos con múltiples parámetros del mismo tipo o indicadores booleanos donde el significado no es obvio solo por el valor.

challenge icon

Desafío

Fácil

Vamos a construir un generador de informes que aproveche los argumentos con nombre para que las llamadas a los métodos sean totalmente claras. Cuando los métodos tienen múltiples parámetros, especialmente aquellos del mismo tipo o indicadores booleanos, los argumentos con nombre hacen que tu código sea autodocumentado.

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 formateada 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 diferentes maneras, omitiendo los parámetros opcionales que no necesites y especificando solo los que importan 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 diferentes configuraciones:

  1. Primer informe: Usa solo 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, manteniendo sus valores predeterminados)
  3. 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 en su propia línea.

Por ejemplo, si las entradas son Sales Q1, Annual Review, y 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 o includeHeader solo para cambiar includeSummary. ¡Esto hace que las llamadas a tus métodos sean mucho más legibles y revelen mejor su intención!

Hoja de referencia

Los argumentos con nombre le 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 los métodos sean más claras y permite pasar argumentos en cualquier orden.

Utilice 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}");
}

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

Los argumentos con nombre funcionan bien con parámetros opcionales. Puede saltar directamente al parámetro que necesite sin proporcionar todos los valores opcionales precedentes:

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, especificar solo timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);

Puede mezclar argumentos posicionales y con nombre, pero los argumentos posicionales deben ir primero. Los argumentos con nombre mejoran la legibilidad, especialmente para métodos con múltiples parámetros del mismo tipo o indicadores booleanos.

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: Generar el primer informe - usar solo el título (se aplican todos los valores predeterminados)
        

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

        // TODO: Generar el tercer informe - usar el título con author: "Admin", includeHeader: false, e includeSummary: true
        // (mantener el valor predeterminado de maxPages)
        

        // Imprimir 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