Pregunta

¿En cuántos idiomas Null no es igual a nada ni siquiera Null?

¿Fue útil?

Solución

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 nula es un valor específico con un significado específico: nada.

Dos nadas son equivalentes, pero dos incógnitas no lo son.La confusión surge del hecho de que se utiliza el mismo nombre (nulo) para ambos conceptos.

Otros consejos

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 condición de "If ... Then"Actuará como False.Además Null <> Null voluntad tambiénproducir Null, entonces:

En VB6 se podría decir eso Null ¡No es igual a sí mismo (ni a ninguna otra cosa), ni desigual!

Se supone que debes probarlo usando el IsNull() función.

VB6 también tiene otros valores especiales:

  • Nothing para referencias de objetos. Nothing = Nothing es un error de compilación.(se supone que debes compararlo usando "is")
  • Missing para parámetros opcionales que no se han proporcionado.No tiene representación literal por lo que ni siquiera puedes escribir. Missing = Missing.(la prueba es IsMissing(foo))
  • Empty para variables no inicializadas.Este prueba es igual a sí mismo aunque hay también Una función IsEmpty().
  • ...avísame si me he olvidado uno

Recuerdo estar un poco disgustado con VB.

Oráculo es por aquí.

SELECT * FROM dual WHERE NULL=null;  --no rows returned

MySQL tiene un operador de igualdad seguro para nulos, <=>, que devuelve verdadero si ambos lados son iguales o ambos lados son nulos.Ver Documentos MySQL.

En C#, Nullable<bool> tiene propiedades interesantes con respecto a los operadores lógicos, pero el operador de igualdad es el mismo que otros tipos en ese lenguaje (es decir, ((bool?)null == (bool?)null) == true) .

Para preservar el en cortocircuito comportamiento de los operadores lógicos en cortocircuito y para preservar la coherencia con los operadores lógicos no en cortocircuito, el booleano anulable tiene algunas propiedades interesantes.Por ejemplo:Verdadero || nulo == Verdadero.falso && nulo == falso, etc.Esto está en directa contradicción con otros lenguajes lógicos de tres valores como ANSI-SQL.

Puedes hacer que Ruby funcione de esa manera:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

En SQL tendrías que hacer algo como:

WHERE column is NULL

en vez de

WHERE column = NULL
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top