Обнуляемый тип - Nullable type

Обнуляемые типы - это функция некоторых языков программирования, которые позволяют устанавливать значение специального значения NULL вместо обычных возможных значений типа данных . В языках со статической типизацией тип, допускающий значение NULL, является типом параметра , тогда как в языках с динамической типизацией (где значения имеют типы, а переменные - нет) эквивалентное поведение обеспечивается наличием одного значения NULL.

NULL часто используется для представления отсутствующего значения или недопустимого значения, например, из функции, которая не смогла вернуть или отсутствующего поля в базе данных, как в NULL в SQL .

Примитивные типы , такие как целые числа и Booleans в целом не могут быть пустыми, но соответствующие обнуляемых типы (обнуляемые целочисленные и обнуляемый Boolean, соответственно) также могут принимать значение NULL.

Пример

Целочисленная переменная может представлять целые числа, но 0 (ноль) - это особый случай, потому что 0 во многих языках программирования может означать «ложь». Также это не дает нам никакого представления о том, что переменная пуста, необходимость в которой возникает во многих случаях. Этого можно добиться с помощью типа, допускающего значение NULL. В таких языках программирования, как C # 2.0, целое число, допускающее значение NULL, например, может быть объявлено знаком вопроса (int? X). В языках программирования, таких как C # 1.0, типы, допускающие значение NULL, могут быть определены внешней библиотекой как новые типы (например, NullableInteger, NullableBoolean).

Логическая переменная делает эффект более понятным. Его значения могут быть либо «истиной», либо «ложью», в то время как логическое значение, допускающее значение NULL, также может содержать представление «не определено». Однако интерпретация или обработка логической операции с такой переменной зависит от языка.

По сравнению с нулевыми указателями

Напротив, в большинстве распространенных языков указатели объектов могут быть установлены в NULL по умолчанию, что означает, что указатель или ссылка указывают в никуда, что никакой объект не назначается (переменная не указывает ни на какой объект). Обнуляемые ссылки были изобретены Хоаром в 1965 году в рамках Algol W языка. Позже Хоар назвал свое изобретение «ошибкой на миллиард долларов». Это связано с тем, что указатели объектов, которые могут иметь значение NULL, требуют от пользователя проверки указателя перед его использованием и требуют определенного кода для обработки случая, когда указатель объекта равен NULL.

В Java есть классы, соответствующие скалярным значениям, например Integer, Boolean и Float. В сочетании с автобоксингом (автоматическое преобразование объекта и значения в зависимости от использования) это позволяет эффективно использовать переменные, допускающие значение NULL, для скалярных значений.

По сравнению с типами опционов

Реализации нулевого типа обычно придерживаются шаблона нулевого объекта .

Существует более общая и формальная концепция, которая расширяет концепцию типов , допускающих значение NULL, она исходит из типов параметров , которые обеспечивают явную обработку исключительного случая. Реализации типа опции обычно придерживаются шаблона "Особый случай".

Языковая поддержка

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

Статически типизированные языки с собственной поддержкой null включают:

Статически типизированные языки с поддержкой null библиотеки включают:

К языкам с динамической типизацией со значением null относятся:

  • Скалярные переменные Perl по умолчанию равны undefи могут быть установлены в undef.
  • PHP с типом NULL и методом is_null (), собственный тип, допускающий значение NULL, в версии 7.1
  • Python имеет Noneценность.
  • У Джулии есть nothingзначение (тип Nothing) и Union{T, Nothing}идиома типа.
  • Ruby со значением nil и типом NilClass.
  • JavaScript имеет nullзначение

Смотрите также

использованная литература