VB.NET - No es nada contra no es nada
¿Alguien aquí usa VB.NET y tiene una fuerte preferencia por 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?
9 answers
Si echas un vistazo al MSIL mientras se está ejecutando verás que no compila exactamente el mismo código. Cuando usas IsNothing () realmente hace 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 "No es nada" es cuando estoy negando que se convierte en "No es nada "en lugar de" No es nada(objeto)", que personalmente siento que se ve más legible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 12:28:37
Encuentro que Patrick Steele respondió esta pregunta mejor en su blog: Evitar es nada()
No copié nada de su respuesta aquí, para asegurar que Patrick Steele obtenga el crédito por su publicación. Pero creo que si estás tratando de decidir si usar Es Nada o no es nada deberías leer su post. Creo que estarás de acuerdo en que Nada es la mejor opción.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 14:12:57
Estoy de acuerdo con "No es nada". Como se indicó anteriormente, es fácil negar con "IsNot Nothing".
Encuentro esto más fácil de leer...
If printDialog IsNot Nothing Then
'blah
End If
Que esto...
If Not obj Is Nothing Then
'blah
End If
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 13:11:51
Usted debe evitar absolutamente el uso de IsNothing()
Aquí están 4 razones del artículo IsNothing () VS Is Nothing
-
Lo más importante es que
IsNothing(object)
le ha pasado todo como un objeto, ¡incluso los tipos de valor! Dado que los tipos de valor no pueden serNothing
, es una comprobación completamente desperdiciada.
Tomemos el siguiente ejemplo:Dim i As Integer If IsNothing(i) Then ' Do something End If
Esto compilará y correrá bien, mientras que esto:
Dim i As Integer If i Is Nothing Then ' Do something End If
No compilará, en lugar de el compilador generará el error:
'Es' operador no acepta operandos de tipo 'Integer'.
Los operandos deben ser tipos reference o nullable. IsNothing(object)
es en realidad parte de parte de laMicrosoft.VisualBasic.dll
.
Esto es indeseable ya que tiene una dependencia innecesaria de la biblioteca VisualBasic.Su lento-33.76% más lento de hecho (más de 1000000000 iteraciones)!
-
Tal vez preferencia personal, pero
IsNothing()
se lee como un Condición Yoda. Cuando nos fijamos en una variable que está comprobando su estado, con él como el tema de su investigación.I. e. does it do x? --- NO Es
x
ing una propiedad de ?Así que creo que
If a IsNot Nothing
lee mejor queIf Not IsNothing(a)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-30 16:07:10
VB está lleno de cosas como esa tratando de que sea "como el inglés" y cómodo para las personas que están acostumbradas a idiomas que usan () y {} mucho. Por ejemplo, en el lado"like english"...VB tiene la palabra clave" No es"...y no, no estoy bromeando. Y por otro lado, como probablemente ya sabes la mayor parte del tiempo, puedes usar () con llamadas a funciones si quieres, pero no tienes que hacerlo.
Prefiero IsNothing()...pero uso C y C#, así que eso es justo lo que es cómodo. Y yo creo que es más legible. Pero ir con lo que se siente más cómodo para usted.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 09:49:51
Me inclino hacia la alternativa "No es nada", principalmente porque parece más OO.
Seguramente Visual Basic no tiene la palabra clave Ain't.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 10:57:27
También tiendo a usar la versión Is Nothing parcialmente de usarla tanto como lo hago en SQL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 12:29:25
Inicialmente usé IsNothing, pero me he estado moviendo hacia el uso de Is Nothing en proyectos más nuevos, principalmente para la legibilidad. La única vez que me quedo con IsNothing es si estoy manteniendo el código donde se utiliza en todo y quiero permanecer consistente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-08 13:24:51
Is Nothing requiere un objeto que ha sido asignado al valor Nothing. IsNothing () puede tomar cualquier variable que no haya sido inicializada, incluso de tipo numérico. Esto es útil, por ejemplo, cuando se comprueba si se ha pasado un parámetro opcional.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-06 04:23:28