Обнуляемый тип - Nullable type
Эта статья нужны дополнительные цитаты для проверка.Март 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Обнуляемые типы являются особенностью некоторых языки программирования которые позволяют установить значение на специальное значение НОЛЬ вместо обычных возможных значений тип данных. В статически типизированных языках тип, допускающий значение NULL, является тип опциона[нужна цитата ], в то время как в языках с динамической типизацией (где значения имеют типы, а переменные - нет), эквивалентное поведение обеспечивается наличием одного значения NULL.
NULL часто используется для представления отсутствующего значения или недопустимого значения, например, от функции, которая не смогла вернуть, или отсутствующего поля в базе данных, как в НОЛЬ в SQL.
Примитивные типы Такие как целые числа и Булевы Обычно не может иметь значение NULL, но соответствующие типы, допускающие значение NULL (целое число, допускающее значение NULL, и Boolean, допускающее значение NULL, соответственно), также могут принимать значение NULL.[жаргон ][нужна цитата ]
Пример
Целочисленная переменная может представлять целые числа, но 0 (ноль) является особым случаем, потому что 0 во многих языках программирования может означать «ложь». Также это не дает нам представления о том, что переменная пуста, необходимость в которой возникает во многих случаях. Этого можно добиться с помощью типа, допускающего значение NULL. В таких языках программирования, как C # 2.0, например, целое число, допускающее значение NULL, может быть объявлено вопросительным знаком (int? X).[1] В таких языках программирования, как C # 1.0, типы, допускающие значение NULL, могут быть определены внешней библиотекой[2] как новые типы (например, NullableInteger, NullableBoolean).[3]
Логическая переменная делает эффект более понятным. Его значения могут быть либо «истиной», либо «ложью», в то время как логическое значение, допускающее значение NULL, также может содержать представление «не определено». Однако интерпретация или обработка логической операции с такой переменной зависит от языка.
По сравнению с нулевыми указателями
Напротив, объект указатели можно установить на НОЛЬ по умолчанию в большинстве распространенных языков, что означает, что указатель или ссылка указывают в никуда, что объект не назначен (переменная не указывает ни на какой объект). Обнуляемые ссылки были изобретены К. А. Р. Хоар в 1965 г. в рамках Алгол W язык. Позже Хоар назвал свое изобретение «ошибкой на миллиард долларов».[4] Это связано с тем, что указатели объектов, которые могут иметь значение NULL, требуют от пользователя проверки указателя перед его использованием и требуют определенного кода для обработки случая, когда указатель объекта равен NULL.
Ява имеет классы, соответствующие скалярным значениям, например Integer, Boolean и Float. В сочетании с автобокс (автоматическое преобразование между объектом и значением в зависимости от использования), это позволяет эффективно использовать переменные, допускающие значение NULL, для скалярных значений.[нужна цитата ]
По сравнению с типами опционов
Реализации обнуляемого типа обычно придерживаются шаблон нулевого объекта.
Существует более общая и формальная концепция, расширяющая концепцию обнуляемого типа, она происходит от типы опционов, которые обеспечивают явную обработку исключительного случая. Реализации типа опции обычно придерживаются шаблона Special Case.[5]
Языковая поддержка
Следующие языки программирования поддерживают типы, допускающие значение NULL.
К статически типизированным языкам с собственной поддержкой null относятся:
Статически типизированные языки с поддержкой null библиотеки включают:
- C # (начиная с версии 2)
- VB.NET
- Ява (начиная с версии 8)
- Scala
- Кислород
- F #
- Статически типизированный Языки интерфейса командной строки
К языкам с динамической типизацией со значением null относятся:
- Perl скалярные переменные по умолчанию
undef
и может быть установлен наundef
. - PHP с типом NULL и методом is_null (), собственный тип, допускающий значение NULL, в версии 7.1 [9]
- Python имеет
Никто
ценить.[10] - Ruby со значением nil и типом NilClass.
- JavaScript имеет
ноль
ценить
Смотрите также
Рекомендации
- ^ «Типы, допускающие значение NULL (C #)». Msdn.microsoft.com. Получено 2013-08-19.
- ^ "(luKa) Developer Zone - NullableTypes". Nullabletypes.sourceforge.net. Получено 2013-08-19.
- ^ "NullableTypes". Nullabletypes.sourceforge.net. Получено 2013-08-19.
- ^ Тони Хоар (2009). «Нулевые ссылки: ошибка в миллиард долларов». QCon London.
- ^ «P of EAA: Special Case». Martinfowler.com. Получено 2013-08-19.
- ^ «Необязательный тип - язык программирования балерин».
- ^ "Null Safety - язык программирования Kotlin".
- ^ «Необязательные типы - язык быстрого программирования».
- ^ https://wiki.php.net/rfc/nullable_types
- ^ https://docs.python.org/3/library/constants.html#None