Обнуляемый тип
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2009 г. ) |
Типы, допускающие значение NULL, — это особенность некоторых языков программирования , которая позволяет устанавливать значение специального значения NULL вместо обычных возможных значений типа данных . В статически типизированных языках тип, допускающий значение NULL, — это тип опции , [ нужна ссылка ] в то время как в динамически типизированных языках (где значения имеют типы, а переменные — нет), эквивалентное поведение обеспечивается наличием одного нулевого значения.
NULL часто используется для обозначения отсутствующего значения или недопустимого значения, например, из функции, которая не вернула результат, или отсутствующего поля в базе данных, как NULL в SQL . Другими словами, NULL не определен.
Примитивные типы, такие как целые числа и логические значения, обычно не могут иметь значение NULL, но соответствующие типы, допускающие значение NULL (целое число, допускающее значение NULL, и логическое значение, допускающее значение NULL, соответственно) также могут принимать значение NULL. [ жаргон ] [ нужна ссылка ] В троичной логике это можно представить как ЛОЖЬ, НУЛЬ, ИСТИНА, а также в трехзначной логике .
Пример
[ редактировать ]Целочисленная переменная может представлять целые числа, но 0 (ноль) является особым случаем, поскольку 0 во многих языках программирования может означать «ложь». Кроме того, это не дает нам никакого представления о том, что переменная пуста, необходимость в этом возникает во многих случаях. Эта потребность может быть достигнута с помощью типа, допускающего значение NULL. в языках программирования, таких как C# 2.0, целое число, допускающее значение NULL, может быть объявлено с помощью вопросительного знака (int? x). Например, [1] [2] : 46 В языках программирования, таких как C# 1.0, типы, допускающие значение NULL, могут быть определены внешней библиотекой. [3] как новые типы (например, NullableInteger, NullableBoolean). [4]
Логическая переменная делает эффект более понятным. Его значения могут быть либо «истина», либо «ложь», в то время как логическое значение, допускающее значение NULL, может также содержать представление «не определено». Однако интерпретация или обработка логической операции с такой переменной зависит от языка.
По сравнению с нулевыми указателями
[ редактировать ]Напротив, в большинстве распространенных языков указателям объектов по умолчанию может быть присвоено значение NULL . Это означает, что указатель или ссылка указывают в никуда, что никакой объект не назначен (переменная не указывает ни на какой объект).Ссылки, допускающие значение NULL, были изобретены К. А. Хоаром в 1965 году как часть Algol W. языка Позже Хоар назвал свое изобретение «ошибкой на миллиард долларов». [5] Это связано с тем, что указатели объектов, которые могут иметь значение NULL, требуют от пользователя проверки указателя перед его использованием и требуют специального кода для обработки случая, когда указатель объекта имеет значение NULL.
В Java есть классы, соответствующие скалярным значениям, например Integer, Boolean и Float. В сочетании с автоупаковкой (автоматическое преобразование между объектом и значением на основе использования) это эффективно позволяет использовать переменные, допускающие значение NULL, для скалярных значений. [ нужна ссылка ]
По сравнению с типами опционов
[ редактировать ]Реализации типов, допускающих значение NULL, обычно придерживаются шаблона нулевого объекта .
Существует более общая и формальная концепция, расширяющая концепцию типа, допускающего значение NULL, она происходит от типов опций , которые обеспечивают явную обработку исключительного случая.
Языковая поддержка
[ редактировать ]Следующие языки программирования поддерживают типы, допускающие значение NULL.
Статически типизированные языки со встроенной поддержкой null включают:
Статически типизированные языки с поддержкой нулевых значений библиотеки включают:
- С# (начиная с версии 2) [2] : 5
- Дельфи
- Бесплатный Паскаль
- VB.NET [10]
- Java (начиная с версии 8)
- Скала
- Кислород
- Ф#
- Статически типизированные языки CLI
К динамически типизированным языкам с нулевым значением относятся:
- Perl по умолчанию имеют значение Скалярные переменные
undef
и может быть установлен наundef
. - PHP с типом NULL и методом is_null(), собственный тип, допускающий значение NULL, в версии 7.1. [11]
- У Python есть
None
ценить. [12] - У Юлии есть
nothing
значение (которое имеет типNothing
) иUnion{T, Nothing}
тип идиома. [13] - Ruby со значением nil и типом NilClass.
- В JavaScript есть
null
иundefined
ценности.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Типы, допускающие значение NULL (C#)» . Msdn.microsoft.com . Проверено 19 августа 2013 г.
- ^ Jump up to: а б Скит, Джон (23 марта 2019 г.). C# в глубине . Мэннинг. ISBN 978-1617294532 .
- ^ «(luKa) Зона разработчика — NullableTypes» . Nullabletypes.sourceforge.net . Проверено 19 августа 2013 г.
- ^ «Нулблетипы» . Nullabletypes.sourceforge.net . Проверено 19 августа 2013 г.
- ^ Тони Хоар (2009). «Нулевые ссылки: ошибка на миллиард долларов» . QCon Лондон.
- ^ «Необязательный тип — язык программирования Ballerina» .
- ^ БиллВагнер. «Типы значений, допускающие значение NULL — справочник по C#» . docs.microsoft.com . Проверено 05 октября 2021 г.
- ^ «Звучит нулевая безопасность | Дарт» .
- ^ «Null Safety — язык программирования Kotlin» .
- ^ Кэтлин Доллард. «Типы значений, допускающие значение NULL — Visual Basic» . docs.microsoft.com . Проверено 05 октября 2021 г.
- ^ «PHP: RFC:nullable_types» .
- ^ «Встроенные константы — документация Python 3.9.5» .
- ^ «Типы · Юлийский язык» .