lunes, 13 de julio de 2009

Mejoras al lenguaje en C# 3.0 y 4.0

Antes de empezar, conviene aclarar que no me considero un experto en C# ni mucho menos, pero sí tengo algo de experiencia con el lenguaje. De hecho podría decir que C# es mi segundo lenguaje después de GeneXus...

El uso que le he dado principalmente ha sido para desarrollar extensiones de GeneXus o aplicaciones que usan GXPublic. Alguna vez hice algo en ASP.Net pero nada demasiado sofisticado.

El tema es que para el uso que le doy habitualmente, me alcanza con la funcionalidad que tiene Visual Studio 2005, que funciona con C# 2.0, y por lo tanto me he estado perdiendo de las nuevas funcionalidades en C# 3.0 (VS2008) y 4.0 (VS2010, todavía en beta).

Son varias las cosas nuevas en C# 3.0 (LINQ, object initializers, anonymous types, etc.), el artículo de Wikipedia sobre C# explica bastante bien que es cada una de estas cosas.

Hay otras dos funcionalidades nuevas que me gustaron mucho cuando las leí en este artículo de Jomo Fisher (del año 2005, estoy un tanto atrasado): lambda expresions y extension methods. Vale la pena leerlo.

Lo de las expresiones lambda (si reconocen el nombre es porque lo vieron en algún curso de programación funcional) viene como a confirmar lo que decía Paul Graham en Hackers and Painters: que los lenguajes de programación tienden a ir incorporando funcionalidades de LISP...

La otra reflexión es que parece que ahora en C# se podría implementar el algoritmo MapReduce de Google, como lo explica Joel Spolsky en su blog. También vale la pena leerlo.

En C# 4.0 que por lo que se todavía está en beta, agregan soporte para tipos de datos dinámicos, para poder utilizar código generado a partir de lenguajes con tipado dinámico (como ser F# o IronPython). Básicamente el tipo dynamic lo que hace es posponer la resolución de tipos al momento de ejecución.

Otra cosa que está buena son los parámetros opcionales y parámetros por nombre (named parameters, cada uno lo traduce lo mejor que puede...), que permite asignar valores por defecto a algunos de los parámetros que luego no son necesarios en la invocación, y permite pasar los parámetros en cualquier orden siempre que se indique cual es cual por su nombre.

En fin... mucha cosa interesante, hay que tratar de mantenerse actualizado.

1 comentario: