RSS 2.0 Atom 1.0 CDF  
JASoft.org - El operador doble interrogación en C#
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

Los tipos anulables en .NET 2.0 son una interesante característica a la que se le puede sacar bastante partido, como ya expliqué en su momento.

Quiero comentar ahora una cosa que se me pasó entonces: el operador doble interrogante (??), el cual es además muy poco conocido.

Dado que los tipos anulables pueden contener un valor o un nulo debemos realizar continuamente comprobaciones en el código para ver si tenemos nulos o no, algo así (ej.):

int? num1 = 5; //En la realidad lo obtendríamos de una BD o algo así
int num2;
if (num1 == null)
   num2 = 0;
else
   num2 = num1;

Lo cual es sencillo pero es un rollo de escribir si hay que hacerlo continuamente. Claro que podemos reducir el código usando el operador ? de toda la vida de C#:

int? num1 = 5;
int num2 = (num1==null)?0:num1;

Es idéntico, más reducido, pero tampoco es mejore mucho la legibilidad ¿verdad?

Bien, C# nos ofrece el operador ?? que hace exactamente lo mismo que lo anterior y tiene las virtudes de ser conciso y a la vez legible (si sabes qué siginifica la doble interrogación, claro). Lo anterior quedaría con este operador así:

int? num1 = null;
int num2 = num1??0;

Es fácil de leer si lo interpretas así: asignar a num2 el valor de num1 o un cero si es nulo. Muy útil. Espero que lo disfrutes si no lo conocías :-))

Wednesday, December 06, 2006 2:59:52 PM (Hora estándar romance, UTC+01:00)  #    Comments [1]   Programación  |  Trackback
Thursday, December 07, 2006 6:56:11 PM (Hora estándar romance, UTC+01:00)
Sí que afecta al rendimiento ya que, por ejemplo, un entero que sea anulable deja de tratarse como un entero (es decir un tipo por valor) y pasa a ser tratado como una clase (un tipo por referencia) lo cual tiene ciertas implicaciones aunque muy leves :-)
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.