Parámetros Opcionales y Parámetros con nombre

En ocasiones definimos un método con una cantidad de parámetros que consumirá a un procedimiento almacenado el cual únicamente definió uno de ellos como obligatorio y el resto como opcional (tiene un valor por defecto en la firma), sin duda la sobrecarga sería una opción pero no es la mas recomendable.

Si hacemos uso de los tipos anulables y no conocemos los parámetros opcionales una llamada a estos métodos sería así:
metodo(null,null,3,null,null);

¿No te gustaría que fuera posible enviar únicamente este parámetro y que el resto tome el valor por defecto de null en lugar de enviar valores nulos? ¡¡Gracias a .NET 4.0 esto es posible!!

Se trata de los parámetros opcionales y los parámetros con nombre.
Veamos cada uno de ellos por separado.

 

Parámetros con Nombre

Los parámetros con nombre nos permiten especificar el nombre del parámetro antes de enviarlo, esto es útil para no depender del IDE o bien, no buscar en la firma del método en la clase donde se definió este método.

Por ejemplo.Supongamos que tenemos la siguiente firma de un método:

public void SumarNumeros(int numero1, int numero2)

Tenemos 2 maneras de mandar a llamar a este método:
Sin parámetros con nombre: SumarNumeros(1,2);
Con parámetros con nombre: SumarNumeros(numero2:2,numero1:1);

En el primer caso se hace uso de la manera tradicional de mandar a llamar a un método, nada nuevo hasta ahora. Mientras que en el segundo caso se hace uso de los parámetros con nombre, observe que deliberadamente he enviado primero el parámetro que esta definido en segundo lugar para hacer notar que esto es posible, ademas se puede deducir que la sintaxis de este llamado es idéntica a JSON es decir:
nombreMetodo(parametro:valor);

Parámetros Opcionales

Ahora vamos con el que para mi es una gran innovación de .NET 4.0. Anteriormente lo único que conocía para lograr algo similar era la sobrecarga, pero si vamos a crear nuevo método para hacer exactamente lo mismo con una cantidad distinta de parámetros cada uno pues como que no tendría mucho sentido el hecho de tener varios métodos ¿No lo creen?.

Para evitar esto aparecieron los parámetros opcionales los cuales nos permiten enviarle a un mismo método una cantidad de parámetros variables (es decir en una llamada le puede enviar 2 de los 5 parámetros que contiene la firma, en otra le envió los 5, en otra solo 1, etc…). Pero… ¿Como logramos esto?

La manera de hacerlo nos recordará mucho a como lo hace SQL Server, ahora el cambio viene no tanto en el llamado si no mas bien en la definición del método.

Por ejemplo.Supongamos que tenemos el método anterior y aplicaremos los parámetros opcionales en su firma, esta quedaría así:
public void SumarNumeros(int numero1=0, int numero2=0)

Observemos que después de la definición del parámetro (tipoDeDato nombre) se le hace una asignación(=valor), lo cuál le indica al compilador que en caso de que estos parámetros no se envíen se les asignará el valor por defecto, la única condición es que es necesario que se coloquen primero los parámetros obligatorios (los que no tienen asignación en la firma) y después los opcionales.

No hay limite para especificar cantidad de parámetros opcionales en un método, por lo que pueden ser todos (como en el caso del ejemplo). Si te preguntas como seria una llamada a este método, estos son algunos ejemplos:

  1. SumarNumeros(); Donde dado que no se envió ninguno de los dos valores a ambos se les daría el valor de cero
  2. SumarNumeros (1,2); Donde no se hace uso de los parámetros opcionales y se envían los dos valores
  3. SumarNumeros(1); En este caso el primer valor (que es el único que se envía) toma el valor de 1 y el otro toma el valor de 0 (el que se colocó en la firma)
  4. SumarNumeros(numero2:1); Por último combinamos los parámetros opcionales con los parámetros con nombre y le enviamos únicamente el segundo parámetro opcional con valor 1 mientras que el primero se queda con el 0.

Como ven estas dos herramientas resultan muy útiles y espero que las usen de vez en cuando en sus desarrollos.

Si quieren mas información sobre el tema les dejo este enlace.
http://geeks.ms/blogs/etomas/archive/2012/05/02/c-b-225-sico-m-233-todos-con-par-225-metros-variables.aspx

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s