¿Alguien aquí usa VB.NET y tiene una fuerte preferencia a favor o en contra de usar IsNothing
en lugar de Is Nothing
(por ejemplo, If IsNothing(anObject)
o If anObject Is Nothing...
)? Si es así, ¿por qué?
EDITAR: Si crees que ambos son igualmente aceptables, ¿crees que es mejor elegir uno y seguir con él, o está bien mezclarlos?
IsNothing()
Respuestas:
Si observa el MSIL mientras se ejecuta, verá que no se compila exactamente con el mismo código. Cuando usa IsNothing () en realidad realiza una llamada a ese método en lugar de solo evaluar la expresión.
La razón por la que tendería a inclinarme hacia el uso de "Is Nothing" es cuando niego que se convierta en "IsNot Nothing 'en lugar de" Not IsNothing (object) ", que personalmente siento que parece más legible.
fuente
Me parece que Patrick Steele respondió a esta pregunta mejor en su blog: Avoiding IsNothing ()
No copié ninguna de sus respuestas aquí, para asegurarme de que Patrick Steele reciba el crédito por su publicación. Pero creo que si intentas decidir si usar Is Nothing o IsNothing no deberías leer su publicación. Creo que estarás de acuerdo en que Is Nothing es la mejor opción.
Editar - Comentario de VoteCoffe aquí
Contenido parcial del artículo: después de revisar más código descubrí otra razón por la que debería evitar esto: ¡acepta tipos de valor! Obviamente, dado que IsNothing () es una función que acepta un 'objeto', puede pasarle lo que quiera. Si se trata de un tipo de valor, .NET lo encuadrará en un objeto y lo pasará a IsNothing, ¡que siempre devolverá falso en un valor encuadrado! El compilador de VB.NET verificará la sintaxis de estilo "Is Nothing" y no compilará si intenta hacer un "Is Nothing" en un tipo de valor. Pero la función IsNothing () se compila sin quejas. -PSteele - VoteCoffee
fuente
Debe evitar absolutamente usar
IsNothing()
Aquí hay 4 razones del artículo IsNothing () VS Is Nothing
Lo más importante
IsNothing(object)
es que todo le ha pasado como un objeto, ¡incluso los tipos de valor! Dado que los tipos de valor no pueden serNothing
, es una verificación completamente desperdiciada.Tome el siguiente ejemplo:
Esto compilará y funcionará bien, mientras que esto:
No se compilará, en su lugar, el compilador generará el error:
IsNothing(object)
en realidad es parte de parte de laMicrosoft.VisualBasic.dll
.Esto no es deseable ya que tiene una dependencia innecesaria de la biblioteca VisualBasic.
¡Es lento - 33.76% más lento de hecho (más de 1000000000 iteraciones)!
Quizás preferencia personal, pero se
IsNothing()
lee como una condición de Yoda . Cuando observas una variable, estás verificando su estado, siendo el tema de tu investigación.es decir, hace que hacer x? --- NO ¿Es
x
una propiedad de él ?Así que creo que se
If a IsNot Nothing
lee mejor queIf Not IsNothing(a)
fuente
Estoy de acuerdo con "Is Nothing". Como se indicó anteriormente, es fácil negarlo con "IsNot Nothing".
Esto me resulta más fácil de leer ...
que esto...
fuente
VB está lleno de cosas como esa que intentan que sea "como el inglés" y cómodo para las personas que están acostumbradas a los idiomas que usan () y {} mucho. Por ejemplo, en el lado "me gusta el inglés" ... VB tiene la palabra clave " Ain't " ... y no, no estoy bromeando. Y por otro lado, como probablemente ya sepa la mayor parte del tiempo, puede usar () con llamadas a funciones si lo desea, pero no tiene que hacerlo.
Prefiero IsNothing () ... pero uso C y C #, así que eso es lo que es cómodo. Y creo que es más legible. Pero ve con lo que te parezca más cómodo.
fuente
Me estoy inclinando hacia la alternativa "Is Nothing", principalmente porque parece más OO.
Seguramente Visual Basic no tiene la palabra clave Ain't.
fuente
También tiendo a usar la versión Is Nothing parcialmente por usarla tanto como lo hago en SQL.
fuente
Inicialmente usé IsNothing, pero me he movido hacia el uso de Is Nothing en proyectos más nuevos, principalmente por legibilidad. El único momento en que me quedo con IsNothing es si mantengo el código donde se usa y quiero mantener la coherencia.
fuente
Is Nothing requiere un objeto que se haya asignado al valor Nothing. IsNothing () puede tomar cualquier variable que no se haya inicializado, incluso de tipo numérico. Esto es útil, por ejemplo, cuando se prueba si se ha pasado un parámetro opcional.
fuente
Nothing
Is Nothing