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

Обнуляемые типы являются особенностью некоторых языки программирования которые позволяют установить значение на специальное значение НОЛЬ вместо обычных возможных значений тип данных. В статически типизированных языках тип, допускающий значение 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 библиотеки включают:

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

  • Perl скалярные переменные по умолчанию undef и может быть установлен на undef.
  • PHP с типом NULL и методом is_null (), собственный тип, допускающий значение NULL, в версии 7.1 [9]
  • Python имеет Никто ценить.[10]
  • Ruby со значением nil и типом NilClass.
  • JavaScript имеет ноль ценить

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

Рекомендации

  1. ^ «Типы, допускающие значение NULL (C #)». Msdn.microsoft.com. Получено 2013-08-19.
  2. ^ "(luKa) Developer Zone - NullableTypes". Nullabletypes.sourceforge.net. Получено 2013-08-19.
  3. ^ "NullableTypes". Nullabletypes.sourceforge.net. Получено 2013-08-19.
  4. ^ Тони Хоар (2009). «Нулевые ссылки: ошибка в миллиард долларов». QCon London.
  5. ^ «P of EAA: Special Case». Martinfowler.com. Получено 2013-08-19.
  6. ^ «Необязательный тип - язык программирования балерин».
  7. ^ "Null Safety - язык программирования Kotlin".
  8. ^ «Необязательные типы - язык быстрого программирования».
  9. ^ https://wiki.php.net/rfc/nullable_types
  10. ^ https://docs.python.org/3/library/constants.html#None