Почему «ноль» присутствует в C # и Java? - PullRequest
71 голосов
/ 07 октября 2008

Мы заметили, что множество ошибок в нашем программном обеспечении, разработанном в C # (или Java), вызывают исключение NullReferenceException.

Есть ли причина, по которой слово "null" даже включено в язык?

В конце концов, если бы не было "null", у меня не было бы ошибки, верно?

Другими словами, какая функция в языке не может работать без нуля?

Ответы [ 25 ]

0 голосов
/ 09 ноября 2010
  • Явный обнуление, хотя это редко необходимо. Возможно, это можно рассматривать как форму защитного программирования.
  • Используйте его (или структуру nullable (T) для ненулевых элементов) в качестве флага, чтобы указать отсутствующее поле при отображении полей из одного источника данных (поток байтов, таблица базы данных) в объект. Может быть очень громоздко создавать логический флаг для каждого возможного обнуляемого поля, и может оказаться невозможным использовать значения часового типа, такие как -1 или 0, когда все значения в диапазоне этого поля допустимы. Это особенно удобно, когда есть много полей.

Являются ли эти случаи использования или злоупотребления субъективными, но я иногда их использую.

0 голосов
/ 07 октября 2008

Нуль является обязательным требованием любого языка OO. Любая переменная объекта, которой не была назначена ссылка на объект, должна быть нулевой.

0 голосов
/ 07 октября 2008

Если вы создаете объект с переменной экземпляра, являющейся ссылкой на какой-либо объект, какое значение вы бы предложили иметь в этой переменной, прежде чем присвоить ей ссылку на какой-либо объект?

0 голосов
/ 07 октября 2008

Обычно - NullReferenceException означает, что некоторому методу не понравилось то, что было передано, и он возвратил нулевую ссылку, которая позже использовалась без проверки ссылки перед использованием.

Этот метод мог бы вызвать более подробное исключение, вместо того, чтобы возвращать ноль, что соответствует режиму fail fast .

Или метод может возвращать значение NULL для вашего удобства, так что вы можете написать , если вместо , попробовать и избежать "издержек" исключения.

0 голосов
/ 07 октября 2008

Я предлагаю:

  1. Ban Null
  2. Расширить логические значения: True, False и FileNotFound
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...