C# 4.0: Parámetros opcionales y con nombre

Con la salida de C# 4.0, se incluyeron varias novedades en el lenguaje como las que voy a presentar hoy.

Empecemos con los parámetros con nombre.

Vamos a imaginar un sencillo método:

void Saludo(string nombre, int edad, string ciudad)
{
    Console.WriteLine("Hola me llamo {0} tengo {1} años y vivo en {2}", nombre, edad, ciudad);
}

¿Cómo se puede usar este método? Es una respuesta obvia ¿Verdad?:

Saludo("Jesus", 24, "Cádiz");

El problema es que quizá no te acuerdes de si primero pedia la edad o la ciudad… Eso si, sabes como se llaman los parámetros, entonces puedes hacer:

Saludo(nombre: "Jesus", edad: 24, ciudad: "Cádiz");

El resultado es sin duda más legible (aunque más redundante), también podemos hacer algo así:

Saludo(ciudad: "Cádiz", edad: 24, nombre: "Jesus");

Hemos variado el orden de los parámetros, pero como le hemos dado un nombre pues no hay problema en ello.

Ahora bien, por otro lado están los parámetros opcionales.

Por ejemplo, tenemos un método para insertar un elemento a una base de datos, por defecto los elementos van a la categoría Sin Categoría a menos que especifiquemos lo contrario:

static void InsertarElemento(string nombre, string categoria = "Sin Categoria", bool debug = false)
{
    if (debug)
        Console.WriteLine("Nombre: {0}nCategoria: {1}", nombre, categoria);

    // Insertar en base de datos
}

Fijamos en la sintaxis del método, le hemos asignado un valor a un par de parámetros. Con esto queremos decirle que esos parámetros son opcionales, no tenemos por qué darles un valor al llamar al método, y en caso de no hacerlo usará esos valores asignados (el nombre sin embargo si es obligatorio), por ejemplo:

InsertarElemento("Canasta");

Con esto asignamos a la base de datos un elemento con el nombre Canasta y como categoría Sin Categoría.

¿Que queremos darle una categoria nosotros y ademas activar el modo debug?:

InsertarElemento("Canasta", "Mimbre", true);

Hemos asignado un valor nuevo a los dos parámetros opcionales, al estar el modo debug activado, antes de insertar el elemento en la base de datos, lo imprimirá:

Nombre: Canasta
Categoria: Mimbre

Lo bueno de esto es que podemos usar los parámetros opcionales y con nombre a la vez, por ejemplo, ¿Cómo podríamos activar el modo debug sin cambiar la categoría por defecto?

Tenemos que hacer uso de los parámetros con nombre, o sea:

InsertarElemento("Canasta", debug: true);

Nos hemos “saltado” el parámetro de la categoría gracias a los parámetros con nombre.

Esto imprimiría:

Nombre: Canasta
Categoria: Sin Categoria

Los parámetros opcionales y con nombre son muy útiles a la hora de trabajar con COM ya que estos métodos suelen recibir hasta una docena de parámetros opcionales y quizá solo uno importante… Antes teníamos que especificarlos todos, ahora simplemente podemos especificar el importante e ignorar el resto.

Tags:

Dejar un comentario