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 funcionaLos 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.
Desafío
FácilConstruyamos 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 claseReportGeneratoren el espacio de nombresReportscon 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 aGenerateReportde 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:
- Primer informe: Usa únicamente el título (se aplican todos los valores predeterminados)
- Segundo informe: Usa el título con
includeSummary: trueymaxPages: 25(omite author e includeHeader, conservando sus valores predeterminados) - Tercer informe: Usa el título con
author: "Admin",includeHeader: falseeincludeSummary: 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: 10Observa 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
}
}
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
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes9Argumentos variables
La palabra clave 'params'Parámetros opcionalesArgumentos con nombreSobrecarga de métodosPractica por tu cuenta: Compilador de C# online