[Además del blog podéis seguir a Scott en twitter.com/scottgu]
Este es el decimo séptimo post sobre una serie de VS 2010 y .NET 4.
En el post de hoy veremos dos de las nuevas características del lenguaje que se han añadido a C# 4 – los parámetros opcionales y los argumentos nominados – así como una forma interesante de aprovechar los parámetros opcionales (tanto en VB como en C#) con ASP.NET MVC 2.
Parámetros opcionales en C# 4.0
C# 4.0 ahora soporta el uso de parámetros opcionales en métodos, constructores e indizadores (nota: VB ha soportado esto desde hace tiempo).
Los parámetros son opcionales cuando se indica un valor por defecto como parte de la declaración. Por ejemplo, el método siguiente recibe dos parámetros – un string «category» y un entero «pageIndex». El parámetro «pageIndex» tiene un valor por defecto de 0, y como tal es un parámetro opcional:
Cuando llamamos a este método podemos pasarle dos parámetros:
O podemos no pasar el segundo parámetro – en ese caso se pasará por defecto el valor 0:
Fijaós que el intellisense de VS 2010 indica cuándo un parámetro es opcional, así como el valor por defecto con el que se inicializará:
Argumentos nominados y parámetros opcionales en C# 4
C# 4 también soporta el concepto de «argumentos nominados». Esto nos permita indicar explícitamente el nombre del parámetro que le estamos pasando al método – en lugar de tan sólo identificarlo por la posición del parámetro.
Por ejemplo, podría haber llamado a la función anterior identificando explícitamente el segundo parametro que le estamos paswando al método GetProductsByCategory por el nombre (haciendo su uso un poco más explícito):
Los argumentos nominados son muy útiles cuando un método tiene varios parámetros opcionales, y queremos especificar qué argumentos le estamos pasando. Por ejemplo, el método DoSomething que recibe dos parámetros opcionales:
Podemos usar los argumentos nominados para llamar al método anterior de un montón de formas:
Como ambos parámetros son opcionales, en el caso en el sólo se indique un parámetro (o ninguno) se pasará el valor por defecto de los parámetros.
ASP.NET MVC 2 y los parámetros opcionales.
Un escenario interesante en el que podemos aprovechar el uso de parámetros opcionales soportados tanto en VB como en C# es con el soporte de binding de entrada de ASP.NET MVC 2 de los métodos de acción y de las clases controladoras.
Por ejemplo, imaginemos que queremos mapear las URLs del estilo «Products/Browse/Beverages» o «Products/browse/Deserts» a un método de acción. Podríamos hacer esto escribiendo una regla de routing URL que mapee las URLs a un método de la siguiente manera:
Ahora podríamos usar el valor «page» para indicar o no los resultados del método Browse para que sean paginados – y si lo son, qué página de resultado queremos mostrar. Por ejemplo:/Products/Browse/Beverages?page=2.
En ASP.NET MVC 1 resolvíamos esto añadiendo un parámetro «page» al método de acción y declararlo como un int nullable (lo que significa que será null si el valor «page» del querystring no está presente). Podríamos escribir el siguiente códidog para convertir el nullable int a int – y asignarle un valor por defecto si no está en el querystring:
Con ASP.NET MVC 2 podemos aprovechar el soporte de parámetros opcionales de VB y C# para expresar este comportamiento más concisamente y claramente. Simplemente declaramos el método de acción con un parámetro opcional con un valor por defecto:
C#:
VB
Si el valor «page» está en el query string (ej: /Products/Browse/Beverages?page=22) se le pasará al método de acción como un entero. Si no está en el query string (ej: /Products/Browse/Beverages) se le pasará el valor 0 al método de acción. Esto hace el código un poco más conciso y leible.
Resúmen
Hay un montón de nuevas características en C# y VB con VS 2010. Las anteriores dos características (parámetros opcionales y parámetros nominados) son dos de ellos. Postearé sobre algunos de ellos en las próximas semanas.
Si estáis buscando un buen libro que resuma todas las caracteríscitas de C# (incluso las de C# 4) y que ofrezca un resumen de las clases básicas de .NET, quizás os podría interesar el libro C# 4.0 in a Nutshell de O’Reilly:
Ha hecho un gran trabajo a seleccionando el contenido con una forma fácil de encontrar ejemplos .
Espero que sirva.
Scott.
Traducido por: Juan María Laó Ramos.
Y antes que nos quejabamos de los opcionales en vb.