Menu
Coddy logo textTech

La palabra clave 'params'

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 47 de 70.

La palabra clave params permite que un método acepte un número variable de argumentos del mismo tipo. En lugar de requerir que quienes llaman al método creen un array manualmente, pueden pasar los argumentos directamente, separados por comas.

Coloque params antes de un parámetro de array en la firma del método:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Todas estas llamadas funcionan
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (arreglo vacío)

El compilador envuelve automáticamente los argumentos en un array. También puedes pasar un array existente directamente si ya tienes uno:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Hay algunas reglas que recordar: un método puede tener solo un parámetro params, y debe ser el último parámetro de la lista. Puedes combinarlo con parámetros regulares:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

La palabra clave params hace que las APIs sean más flexibles y fáciles de usar para quien las llama, razón por la cual se ve en métodos como Console.WriteLine y string.Format.

challenge icon

Desafío

Fácil

Vamos a construir un formateador de mensajes flexible que utiliza la palabra clave params para manejar cualquier cantidad de valores. Crearás una clase de utilidad que puede formatear mensajes con argumentos variables, demostrando cómo params hace que los métodos sean más versátiles y fáciles de usar para quien los llama.

Organizarás tu código en dos archivos:

  • MessageFormatter.cs: Crea una clase MessageFormatter en el espacio de nombres Formatting con dos métodos que utilicen params:
    • Combine(params string[] parts) - une todas las cadenas proporcionadas con un espacio entre ellas y devuelve el resultado.
    • FormatList(string label, params int[] numbers) - combina un parámetro regular con un array params. Debe devolver la etiqueta seguida de dos puntos, luego todos los números separados por comas (por ejemplo, Scores: 85, 90, 78).
  • Program.cs: En tu archivo principal, demuestra ambos métodos con entradas. Lee una cadena para la etiqueta, luego lee una línea de enteros separados por comas. Usa Combine para unir tres palabras fijas, y usa FormatList para mostrar la etiqueta con los números.

Recibirás dos entradas:

  • Una cadena de etiqueta (por ejemplo, Scores)
  • Una lista de enteros separados por comas (por ejemplo, 85,90,78,92)

Primero, llama a Combine con las palabras "Hello", "params", y "world!" e imprime el resultado. Luego, analiza los enteros separados por comas en un array y llama a FormatList con la etiqueta y el array de enteros, imprimiendo también ese resultado.

Por ejemplo, si las entradas son Scores y 85,90,78, la salida debería ser:

Hello params world!
Scores: 85, 90, 78

Observa cómo Combine acepta cualquier número de cadenas directamente, mientras que FormatList muestra que puedes mezclar parámetros regulares con params; el parámetro params simplemente debe ir al final. ¡También puedes pasar un array existente a un método params, que es exactamente lo que harás con los enteros analizados!

Hoja de referencia

La palabra clave params permite que un método acepte un número variable de argumentos del mismo tipo sin requerir que los llamadores creen un array manualmente:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// All of these calls work
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (empty array)

Puedes pasar un array existente directamente a un método params:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Reglas para params:

  • Un método solo puede tener un parámetro params
  • Debe ser el último parámetro en la lista
  • Se puede combinar con parámetros regulares
public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Pruébalo tú mismo

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // Leer las entradas
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: Usa MessageFormatter.Combine con "Hello", "params" y "world!"
        // e imprime el resultado
        
        
        // TODO: Convierte los enteros separados por comas en un array de int
        // Pista: Divide la cadena y convierte cada parte a int
        
        
        // TODO: Usa MessageFormatter.FormatList con el label y el array de int
        // e imprime el resultado
        
    }
}
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