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 :-))
Muy interesante, ahora mi pregunta, está característica la hay en Visual Basic?
Saludos
«esta característica la hay en Visual Basic?»
A ver… Estamos hablando de lenguajes serios (C#), no lenguajes de juguete…
(venga, lapidadme xDD)
no existe un equivalente en VB.NET
No, VB no tiene este operador. Los tipos anulables están mejor soportados en C#.
Me refería en general los tipos anulables, lo de que es un lenguaje de juguete… bueno… yo prefiero C#, pero uso ambos :), era simple curiosidad.
Saludos
Los tipos anulables forman parte de la plataforma .NET 2.0 y, sí, están soportados por VB también, claro.
Saloudos
JM.
Buena e interesante opción que utilizaré. En cuanto a lo de VB, creo que depende de como programa cada uno, hay gente que le gustar tirar más líneas con ; y {} y otras que no. Creo la escalabilidad(que no se si es la palabra adecuada, pero no me sale otra) ya nos la da el framework.
Un Saludo
Hasta donde yo sé, el operador ?? es exclusivo de C# 2005, en VB 2005 tenemos que utilizar la propiedad HasValue. Que tiene guasa que se pueda asignar ‘Nothing’ a una variable pero NO se pueda «preguntar» si vale ‘Nothing’… con lo fácil que podría ser implementar sintácticamente un «if x = Nothing». Esa clase de cosas son las que me hacen pensar aún lo del «lenguaje de juguete». Que de todas maneras no veas si ha evolucionado desde la versión 6 y anteriores.
Claro que también se podría decir que para qué queremos más y más operadores en un lenguaje hasta ahora «casi perfecto» como C#, operadores como éste ‘??’ que pueden recordarnos un poco a C++ en lo críptico que se volvía el lenguaje con tanto operador.
Pero en fin creo que por aquí nos salimos del tema… 😉
Saludos
Visual Basic ha evolucionado mucho, aunque hay que tener en cuenta que C# es un lenguaje muy poderoso y de caracteristicas que lo hacen mas robusto ante los demas.
Para los que sin conocer se dedican a criticar. El operador ternario de vb es iif que seria el equivalente para ?, no se si para ?? exista uno similar pero un acercamiento podria ser lo siguiente
Dim s1 As String = Nothing
Dim s2 As String = IIf(s1 Is Nothing, «(undefined)», s1).ToString
No me encuentro a favor de vb, pero si recordaran a fin de cuentas es msil, y se que el aferrarse a un solo lenguaje es un antipatron
El arma mas poderosa es simplemente con la que se cuenta con mayor conocimiento de la misma
oye yo tengo un problema al leer la cadena
TJ,96,978,D3,uEllQaTqV3KfeUuO¿cGsJktRQLroS-¿1k1OsDh5vrKlNdz09
me desaparece el signo ¿ puede ser poralgo similar a lo que estas comentando?
No, por eso no puede ser. de todos modos ¿de donde lees esa cadena? ¿de un archivo?
JM
Muchas gracias, acabo de aprender dos cosas nuevas.
Pero he encontrado esto de casualidad, estaba buscando el operador |= (de C#)
Alguien sabe que hace ese operador?
Me imagino que te refieres al operador != que significa «Distinto» o «Desigualdad»
Por ejemplo:
if (a != b)
quiere decir «si a es distinto de b» 🙂
Saludos
JM