Обычно имеются два специальных значения. Некоторые языки обрабатывают оба, некоторые только 1, и бросают ошибку с другой, а некоторые объединяют их. Эти два значения: Null
и Undefined
.
Undefined
будет пытаться использовать переменную, которая утончаются не существует.
Null
будет пытаться использовать переменную, которая существует, но имеет нет значения.
Null
может быть полезным, поскольку оно является гарантированным значение, которое указывает на то, что что-то не так, или за пределами домена/диапазон возможных ответов. Возьмите Java, например:
Если у вас не было null
, что делать, если вы сделали поиск в HashMap
для чего-то, чего не было на карте? Что бы вы вернули? Если вы вернули объект, то как бы вы знали, что объект означает, что ничего не было, или это было на самом деле на карте. Обходные пути могут включать в себя создание собственного «NON_EXIST» объекта Constant, но это по сути то же самое, что и null
. Другим обходным решением может стать исключение. Теперь вы смотрите на значительное влияние производительности.
Опять же, его идея иметь гарантированное допустимое значение, которое вы можете использовать. Он всегда доступен вам и всегда не связан с набором «реальных ценностей», которые обычно возвращаются из выполняемой вами операции. Null
поэтому предназначенный специально для обозначения чего-то особенного.
Как я уже говорил, есть также оптимизации, которые могут быть сделаны здесь, а потому, что Null
- это особое значение. В таких языках, как Java, если вы первоначально ссылались на объект исключительно по переменной, то установите эту переменную на null
, которую вы удаляете эту ссылку, и позволяете сборщику мусора Java собирать данные, которые теперь не подлежат проверке. Если вместо этого вы позволяете этой переменной сидеть на веки, что кусок памяти, который никогда не будет использоваться снова, будет продолжать удерживать ресурсы. Это надуманный пример, но он доказывает точку, и в некоторых ресурсоемких Java-программах вы увидите эти явные присвоения null
.
Это философски досадный вопрос. – Daniel