Я постоянно слышу, как люди говорят о том, как ненулевые ссылочные типы решат так много ошибок и облегчают программирование. Даже создатель null называет его своим billion dollar mistake, а Spec# вводит типы, не допускающие нулевых значений, для борьбы с этой проблемой.Об обсуждениях, не связанных с нулевыми типами
EDIT: Игнорировать мой комментарий о SpeC#. Я неправильно понял, как это работает.
EDIT 2: я должен говорить с теми людьми, я действительно надеялся, для кого-то спорить с :-)
Так что я бы предположил, будучи в меньшинстве, что я ошибаюсь, но я не могу понять, почему в этой дискуссии есть какие-то заслуги. Я вижу нуль как инструмент поиска ошибок. Учитывайте следующее:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM! Нарушение доступа. Кто-то забыл инициализировать c
.
Теперь рассмотрим это:
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
возгласы. Петля тихо пропущена. Это может занять некоторое время, чтобы отследить проблему.
Если ваш класс пуст, код в любом случае будет терпеть неудачу. Почему бы вам не сказать вам систему (хотя и немного грубо), вместо того, чтобы самим понять это?
Приятно видеть, что другие наслаждаются пустым, я все еще в школе, поэтому я просто предполагаю, что я чего-то не хватает. –
Есть более принципиальные способы обработки «нет значения». NULL исключает примитивные типы, такие как int. Лучше, чтобы система типов представляла отсутствие значения последовательно для всех типов, а не только для ссылок. См. Типы Haskell «Maybe» и ML/OCaml/F #, чтобы посмотреть, как это должно быть сделано. – MichaelGG
Возможный дубликат [Лучшее объяснение для языков без нуля] (http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null) – nawfal