На скольких языках Null не равен ничему, даже не Null? - PullRequest
7 голосов
/ 16 сентября 2008

На скольких языках Null не равен ничему, даже не Null?

Ответы [ 7 ]

15 голосов
/ 16 сентября 2008

Это так в SQL (как язык логики), потому что нуль означает неизвестный / неопределенный.

Однако в языках программирования (например, C ++ или C #) нулевой указатель / ссылка - это конкретное значение с определенным значением - ничего.

Два ничего не эквивалентны, а два неизвестных - нет. Путаница возникает из-за того, что для обоих понятий используется одно и то же имя (ноль).

4 голосов
/ 26 сентября 2008

В VB6 выражение Null = Null будет выдавать Null вместо True, как и следовало ожидать. Это вызовет ошибку времени выполнения, если вы попытаетесь присвоить его логическому значению, однако, если вы его используете в качестве условия "If ... Then" он будет действовать как False. Более того Null <> Null будет также производим Null, поэтому:

В VB6 вы могли бы сказать, что Null не равен ни себе (или чему-либо еще), ни неравенству!

Вы должны проверить это с помощью функции IsNull().

VB6 также имеет другие специальные значения:

  • Nothing для ссылок на объекты. Nothing = Nothing - ошибка компиляции. (вы должны сравнить его, используя "is")
  • Missing для необязательных параметров, которые не были заданы. Он не имеет буквального представления, поэтому вы даже не можете написать Missing = Missing. (тест IsMissing(foo))
  • Empty для неинициализированных переменных. Этот тест тестирует себя равным, хотя есть также функция IsEmpty().
  • ... дайте мне знать, если я забыл один

Я помню, что был немного противен VB.

3 голосов
/ 16 сентября 2008

В MySQL есть оператор равенства нулевой безопасности <=>, который возвращает значение true, если обе стороны равны или обе стороны равны нулю. См. MySQL Docs .

3 голосов
/ 16 сентября 2008

Оракул такой.

SELECT * FROM dual WHERE NULL=null;  --no rows returned
2 голосов
/ 26 сентября 2008

В C # Nullable имеет интересные свойства по отношению к логическим операторам, но оператор равенства такой же, как и другие типы в этом языке (т. Е. ((Bool?) Null == (bool?) Null) = = правда).

Чтобы сохранить поведение коротких замыканий логических операторов с коротким замыканием и согласованность с логическими операторами без короткого замыкания, логическое значение Nullable имеет некоторые интересные свойства. Например: правда || null == правда. false && null == false и т. д. Это находится в прямом противоречии с другими трехзначными логическими языками, такими как ANSI SQL .

2 голосов
/ 16 сентября 2008

Вы можете заставить рубин работать таким образом:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
0 голосов
/ 26 ноября 2009

В SQL вы должны сделать что-то вроде:

WHERE column is NULL

вместо

WHERE column = NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...