¿En cuántos idiomas Null no es igual a nada ni siquiera nulo?¿En cuántos idiomas Null no es igual a nada ni siquiera Null?
Respuesta
Es así en SQL (como lenguaje lógico) porque nulo significa desconocido/indefinido.
Sin embargo, en los lenguajes de programación (como, por ejemplo, C++ o C#), un puntero/referencia nulo es un valor específico con un significado específico: nada.
Dos nacimientos son equivalentes, pero dos incógnitas no lo son. La confusión proviene del hecho de que el mismo nombre (nulo) se usa para ambos conceptos.
** Hay ** algunos lenguajes de programación con nulo-propagación. Por ejemplo, VB.Net http://msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx – MarkJ
Oracle es de esta manera.
SELECT * FROM dual WHERE NULL=null; --no rows returned
En realidad, esa es una propiedad de SQL en general, no es específica de Oracle. – sleske
MySQL tiene un operador de igualdad nulo seguro, < =>, que devuelve verdadero si ambos lados son iguales o ambos lados son nulos. Ver MySQL Docs.
+1 Interesante, pero probablemente debería haber sido un comentario sobre una respuesta SQL – Willbill
Puede hacer rubí funciona así:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
Pato golpeando es una trampa :) –
@Hugh: Bueno, uno podría decir eso, pero * es * posible, lo que significa que la gente lo hará ... si eso es bueno o malo es otro asunto. – sleske
En ruby, null se llama nil y NULL no se definiría como el código publicado. Sin embargo, es perfectamente posible hacer lo que está implícito aquí escribiendo: 'class NilClass; def == (o); falso; fin; end' – einarmagnus
En VB6 la expresión Null = Null
producirá Null
en lugar de True
como era de esperar. Esto causará un error de tiempo de ejecución si intenta asignarlo a un booleano; sin embargo, si lo usa como como "If ... Then
", actuará como False
. Por otra parte Null <> Null
se también producen Null
, por lo que:
En VB6 se podría decir que no es ni Null
igual a sí mismo (o cualquier otra cosa), ni desigual!
Se supone que debe probarlo utilizando la función IsNull()
.
VB6 también tiene otros valores especiales:
Nothing
de referencias a objetos.Nothing = Nothing
es un error de compilación. (Se supone que debe compararlo usando "is
")Missing
para los parámetros opcionales que no se han proporcionado. No tiene representación literal, por lo que no puede escribirMissing = Missing
. (la prueba esIsMissing(foo)
)Empty
para variables no inicializadas. Éste prueba igual a sí mismo aunque hay también una funciónIsEmpty()
.- ... quisiera saber si me he olvidado de uno
Recuerdo que estaba un poco disgustado con VB.
VB.Net también tiene una propagación nula. La propagación nula es confusa, pero si vas a tener tipos que aceptan nulos, es discutible que el gato esté fuera de la bolsa, y deberías propagar nulos. http://msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx – MarkJ
En C#, se puede anular > tiene propiedades interesantes con respecto a los operadores lógicos, pero el operador de igualdad es el == verdadero).
Para conservar el comportamiento short-circuited de los operadores lógicos en cortocircuito, y para preservar la coherencia con los operadores lógicos no en cortocircuito, el booleano nullable tiene algunas propiedades interesantes. Por ejemplo: true || null == verdadero. falso & & null == falso, etc. Esto está en contradicción directa con otros lenguajes lógicos de tres valores como ANSI SQL.
Hay otros comportamientos interesantes en C#. Para algunos valores de x y y, 'x == y' es verdadero, pero' x <= y' es falso. Lo cual parece bastante difícil de defender. http://msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx – MarkJ
En SQL que tendría que hacer algo como:
WHERE column is NULL
en lugar de
WHERE column = NULL
No
- 1. Nada es igual a String.Empty, null no es igual a String.Empty, ¿qué me falta aquí?
- 2. Empty ArrayList es igual a null
- 3. por qué no es nulo igual a null falsa
- 4. Cómo reemplazar Backbone.sync con nada, ni siquiera localStorage?
- 5. ¿Es posible escribir un programa en C que no hace nada, ni siquiera ocupando memoria?
- 6. UrlRewriting.Net Module + IIS7 Igual a Page.User == null?
- 7. (a! = Null) o (null! = A)
- 8. Cuando es `X no es null` no el mismo que` NO (X es NULL) `
- 9. campo Mongodb no null delete
- 10. #define NULL NULL
- 11. estructuras Comparando a NULL
- 12. (obj == null) vs (null == obj)?
- 13. '...! = Null' o 'null! = ....' mejor rendimiento?
- 14. Usando "es nulo/No NULL" en LINQ a SQL
- 15. ApplicationBar siempre es NULL
- 16. php no es igual a no es igual, igual a
- 17. int.TryParse = null si no es numérico?
- 18. ¿Por qué `null> = 0 && null <= 0` pero no` null == 0`?
- 19. ¿Es ReferenceEquals (null, obj) lo mismo que null == obj?
- 20. NULL arg permitido a sscanf?
- 21. Usando NULL en C++?
- 22. mysql null a 0
- 23. ¿Una referencia no puede ser NULL o puede ser NULL?
- 24. La excepción es NULL siempre
- 25. ¿Es seguro #define NULL nullptr?
- 26. SQL es nulo e = null
- 27. window.onpopstate, event.state == null?
- 28. what is "= null" and "IS NULL"
- 29. Thread.getContextClassLoader() == null?
- 30. ¿NULL siempre es cero en C?
un idioma, sino también de punto flotante NaN no es igual a sí mismo. – Joren