Bienvenido a este primer ejemplar del Boletín para Desarrolladores Danysoft, que comenzará a aparecer periódicamente a partir de hoy. Con este boletín pretendemos mantenerte informado sobre las noticias más recientes que se produzcan el mundo del software, centrándonos principalmente en las tecnologías Microsoft (con las que personalmente vengo trabajando desde hace muchos años), así como en todo lo relacionado con el desarrollo para dispositivos móviles, tal vez el área de la programación que ha registrado un crecimiento más vertiginoso en los últimos años.

Asimismo, queremos que cada ejemplar sea lo más instructivo posible para todos, y por ello cada boletín incluirá dos artículos de actualidad relativamente cortos relacionados con temas como lenguajes de programación, bases de datos, interacción con la nube e interfaces de desarrollo (API) de propósito específico. Queremos lograr la aceptación tanto de quien nos visite periódicamente como del lector ocasional; es por ello que a lo sumo uno de los dos artículos antes mencionados podría ser parte de una serie.

Finalmente, queremos dar al boletín una orientación eminentemente práctica, y es por ello que pensamos editar frecuentemente artículos del tipo “Cómo implementar X utilizando la herramienta Y”, que sean de utilidad a quienes utilicen la herramienta y posiblemente estimulen a otros programadores a explorarla. Por supuesto, los verdaderos dueños de una publicación como ésta son sus lectores, y es por ello que ponemos a vuestra disposición desde ya mismo la dirección de correo boletin@danysoft.com. Contamos con recibir por esta vía vuestros mensajes, ya sea para sugerir nuevos temas o para recomendar mejoras potenciales.

Quiero agradecer de corazón la invitación de Danysoft, empresa en la que comencé mi andadura profesional en España y de la que guardo gratos recuerdos y muchos buenos amigos, para dar vida a este boletín, que me permitirá seguramente retomar el contacto con viejos conocidos y la labor divulgativa, que siempre me ha apasionado.

Espero sinceramente que este ejemplar, y los que le sigan, sean de su agrado.

Novedades en C# 6

Desde hace ya algunos meses, el equipo de desarrollo de C#[1] en Microsoft tiene perfiladas las principales novedades que se incorporarán al lenguaje C# [2] en la próxima edición de Visual Studio. Aunque son muchos los que opinan que la versión 6 es una versión “maldita” para cualquier lenguaje de programación (vea, por ejemplo, la referencia [3]), personalmente nos parece que C# será capaz de superar esa maldición; aunque se nos antoja que tal vez los líderes del equipo de desarrollo del lenguaje habían oído hablar de ella, y por eso se han limitado aquí a añadir características sencillas, que intentan principalmente incorporar “azúcar sintáctico” o limar algunas asperezas menores del lenguaje, lo que permitirá simplificar escenarios de programación habituales sin añadir ningún nuevo bagaje conceptual complejo.

A lo largo de la serie de artículos que comienza con éste iremos desmenuzando una tras otra todas las novedades propuestas para C# 6, que ya están implementadas en el compilador incorporado en Visual Studio 2015 Preview (con la que han sido probados los fragmentos de código que se presentan aquí). En esta entrega presentaremos las novedades relacionadas con la declaración de propiedades y métodos de una clase, y para mostrar la sintaxis correspondiente a cada nueva característica nos apoyaremos en la clase cuyo código se presenta en el Listado 1.

INICIALIZADORES DE PROPIEDADES IMPLEMENTADAS AUTOMÁTICAMENTE

Las propiedades implementadas automáticamente fueron introducidas en C# 3.0, y una presentación detallada de las mismas puede encontrarse en mi ya añejo libro “C# 3.0 y LINQ” (Krasis Press, 2008). Básicamente, C# 3.0 permitió al programador declarar propiedades con la sintaxis abreviada.

Sin tener que preocuparse de declarar el campo de respaldo, que el compilador se encarga de generar automáticamente. Sin embargo, no se proporcionaba un mecanismo para indicar un valor inicial para la propiedad en caso de que éste fuera diferente del valor por defecto del tipo, lo que obligaba al programador en tales casos a acudir a la sintaxis más “verbosa”:

C# 6 resuelve el inconveniente anterior, permitiendo al programador codificar la propiedad como sigue:

El inicializador opera directamente sobre el campo de respaldo generado automáticamente, y no a través del método de acceso de escritura (set). Los inicializadores se ejecutan en el mismo orden en el que aparecen en el código fuente, al mismo tiempo que los inicializadores de otros campos de la clase. Observe también que los inicializadores no pueden hacer referencia a otros campos o propiedades del objeto (this), que no ha sido aún inicializado completamente.

Listado 1

PROPIEDADES INICIALIZADAS AUTOMÁTICAMENTE DE SÓLO LECTURA

Otra de las situaciones comunes que exigía al programador, en versiones anteriores de C#, recurrir a la sintaxis “verbosa” de declaración de propiedades era la necesidad de que la propiedad fuera de sólo lectura. C# 6 ofrece también una solución para este caso (que puede combinarse con la inicialización explicada en el punto anterior). Por ejemplo, en el Listado 1 la clase Persona hereda de una clase llamada Base, que ofrece una propiedad de sólo lectura llamada MarcaTiempo. La idea es la de que todo objeto creado por nuestro sistema vaya acompañado de un valor (timestamp) que indique el momento en el que objeto fue creado. La propiedad MarcaTiempo ha sido precisamente definida como de sólo lectura:

El campo de respaldo para una propiedad generada automáticamente de sólo lectura (que es marcado internamente por el compilador con el atributo readonly) puede inicializarse mediante un inicializador, como en la línea de código anterior, o también en el constructor de la clase:

En cualquiera de los casos, la asignación se realiza directamente sobre el campo de respaldo generado automáticamente.

MÉTODOS Y PROPIEDADES CUYO CUERPO ES UNA EXPRESIÓN

Con el mismo objetivo de las dos novedades anteriores (permitir la declaración de tipos de una manera más concisa), la idea que subyace a los métodos y propiedades cuyo cuerpo es una expresión es la de utilizar una sintaxis similar a la de las expresiones lambda para codificar más sucintamente los miembros de una clase que se definan mediante una cantidad de código relativamente pequeña. Por ejemplo, la clase Persona del Listado 1 redefine el método ToString heredado de System.Object de la siguiente forma:

En versiones anteriores de C#, el método se tendría que haber escrito así:

En el caso de métodos que no retornan un valor (void), la expresión que sigue a la “flecha lambda” debe ser una expresión-instrucción:

Una sintaxis similar a la anterior es también aplicable a las propiedades e indizadores de sólo lectura (pero no de lectura y escritura). Nuestra clase Persona incluye la siguiente propiedad calculada:

Que en versiones anteriores habría que haber expresado así:

Observa que no es necesario utilizar la palabra reservada get, que está implícita por el uso de la notación lambda. Note también que si por equivocación o descuido pusiéramos un simple par de paréntesis detrás del identificador Edad, el código compilaría, pero ¡habríamos convertido a la propiedad en un método!

CONCLUSIONES

En esta primera entrega de la serie hemos presentado las novedades que incorporará C# 6 en relación con la declaración de miembros de clases (propiedades y métodos), orientadas a simplificar al máximo la expresión de situaciones comunes que anteriormente requerían mucho código repetitivo. En nuestra próxima entrega presentaremos el siguiente grupo de novedades.

Deseo descargar código de ejemplo

Referencias

[1] “New Features in C# 6”, en el blog de equipo de desarrollo de C#.

[2] “The New and Improved C# 6.0”, por Mark Michaelis, en MSDN Magazine de octubre de 2014.

[3] “The Curse of Version 6”, por Andrew Binstock, en Dr. Dobbs de septiembre de 2014.

Sigue descubriendo

1 comentario

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *