Menu

El operador ?? en C# (Null Coalescing Operator)

Julio 15, 2013 - .NET

Dentro de los muchos operadores que tiene un lenguaje de programación hay unos que se usan menor que otros, tal vez por desconocimiento o por pereza de entender un nuevo operador. Recientemente googleando conocí un operador que sinceramente era desconocido para mi, el operador de NULL COALESCING cuyo símbolo es la doble interrogación de cierre (??). Después de leer la documentación oficial  y no entender muy bien decidí hacer lo que hacemos todos cuando estamos aprendiendo algo nuevo, crear tu mismo el ejemplo y ver que pasa. Habiendo hecho esto, entendí mucho mejor el comportamiento de este operador y creo que la forma mas fácil de explicarlo es: Dado dos valores devuelve el primero que no sea nulo (La mejor manera de entenderlo para mi fue compararlo con un ISNULL del SQL Server).

Requisitos

Manos a la obra

Por lo regular en el caso de tener que lidiar un nulo (Por ejemplo para saber si existe una instancia de un objeto) utilizo un simple if.

int? x = null;
int? y;

Console.WriteLine("Without ??: ");

if (x != null)
{
y = x;
}else{
y = 0;
}
Console.WriteLine(y.ToString());
Console.WriteLine("\r\nWith ??: ");</pre>

Podemos ahorrarnos el if si utilizamos el operador ?? de la siguiente forma.

//Devuelve el primero que no sea nulo, por tanto el orden importa,
//en este caso x es nulo por tanto devolverá 0
y = x ?? 0;

Console.WriteLine(y.ToString());

//En este caso como el primer parámetro que es z no es nulo,
//por tanto devuelve este valor

int? z = 1;
y = z ?? 0;
Console.WriteLine(y.ToString());

Y con esto nos habremos ahorrado unas cuantas líneas y tendremos un código mas limpio, genial no?

La salida del programa completo es esta:

image

Les dejo el proyecto:
OperadorNullCoalescing

Conclusiones

Este operador nos puede ayudar a escribir un código mas limpio, obviamente no aplica en todos los casos y se debe tener mucho cuidado con el orden de los parámetros, por lo menos el primero de ellos debe ser nullable.

Happy coding!

3 pensamientos sobre “El operador ?? en C# (Null Coalescing Operator)

gerard

hola eduardo,
comento q ya he venido trabajando con este tipo de operadores, facilitan mucho la vida con respecto a la validaciones de valores null pq asi ya sabemos que es lo q posee esa variable dado caso no contenga ningun valor, he trabajado con decimal?, bool?. pero tengo una duda… string? creo q no se aplica esto ya uqe en mi caso no me funciona, o bien en el codigo q trabajamos no lo utilizamos pq no funca, no se si String? funcione.. weno gracias por la info

Respuesta
gerard

tambien esta la “condicion en caliente” que es de esta forma

condition ? first_expression : second_expression;

que es muy interesante para hacer validaciones “encaliente”

var tratamiento = this.IdTratamiento.HasValue && this.IdTratamiento > 0 ? tratamientodesc + ” ” : string.Empty;

happy coding

Respuesta
Proco

Si gerard, gracias por comentar!. Efectivamente este operador solo funciona para los NULL.

Respuesta

Deja un comentario

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