Null 許容型は、一部のプログラミング言語の機能であり、データ型の通常の可能な値ではなく、特別な値 NULL に値を設定できるようにします。静的に型付けされた言語では、Null 許容型はオプションの型です[引用が必要]。一方、動的に型付けされた言語 (値には型がありますが、変数には型がありません) では、単一の null 値を持つことで同等の動作が提供されます。
NULL は、 SQLのNULLのように、返されなかった関数やデータベース内の欠落フィールドなど、欠落した値や無効な値を表すためによく使用されます。つまり、NULL は未定義です。
整数やブール値などのプリミティブ型は一般に null にできませんが、対応する null 許容型 (それぞれ null 許容整数と null 許容ブール値) も NULL 値をとることができます。[専門用語] [引用が必要]これは、3 値論理と同様に、 3 値論理で FALSE、NULL、TRUE として表すことができます。
例
整数変数は整数を表すことができますが、0 (ゼロ) は特別なケースです。多くのプログラミング言語では 0 は「偽」を意味する場合があるからです。また、これは変数が空であることを示す概念を提供しませんが、これは多くの状況で必要になります。この必要性は、null 許容型で実現できます。たとえば、 C# 2.0 などのプログラミング言語では、null 許容整数は疑問符 (int? x) で宣言できます。[1] [2] : 46 C# 1.0 などのプログラミング言語では、null 許容型は外部ライブラリ[3]によって新しい型 (例: NullableInteger、NullableBoolean) として定義できます。[4]
ブール変数を使用すると、効果がより明確になります。その値は「true」または「false」のいずれかになりますが、null 許容ブール値には「未決定」の表現も含まれる場合があります。ただし、このような変数を含む論理演算の解釈または処理は、言語によって異なります。
ヌルポインタと比較
対照的に、オブジェクトポインターは、ほとんどの一般的な言語ではデフォルトでNULLに設定できます。つまり、ポインターまたは参照はどこにも指しておらず、オブジェクトは割り当てられていません (変数はどのオブジェクトも指していません)。Null 可能参照は、 1965 年にCAR HoareによってAlgol W言語の一部として発明されました。Hoare は後に、この発明を「10 億ドルの間違い」と表現しました。[5] これは、NULL になる可能性のあるオブジェクト ポインターでは、ユーザーが使用前にポインターを確認する必要があり、オブジェクト ポインターが NULL の場合に対処するための特定のコードが必要になるためです。
Java には、 Integer、Boolean、Float などのスカラー値に対応するクラスがあります。オートボクシング(オブジェクトと値の間で自動的に使用法に基づいて変換する) と組み合わせると、スカラー値に null 許容変数を効果的に使用できます。[引用が必要]
オプションタイプとの比較
Null 許容型の実装は通常、 null オブジェクト パターンに準拠します。
null 許容型の概念を拡張する、より一般的で正式な概念があります。これは、例外的なケースの明示的な処理を強制する オプション型に由来しています。
言語サポート
次のプログラミング言語は null 許容型をサポートしています。
ネイティブの null サポートを備えた静的型付け言語には次のものがあります。
ライブラリ null をサポートする静的型付け言語には次のものがあります。
null を含む動的型付け言語には次のものがあります。
- Perlスカラー変数はデフォルトで であり
undef、 に設定できますundef。 - PHPのNULL型とis_null()メソッド、バージョン7.1のネイティブnull許容型[11]
- Pythonには価値がある
None。[12] - Juliaには
nothing値(型Nothing)と型イディオムがありますUnion{T, Nothing}。[13] - Ruby にはnil 値と NilClass 型があります。
- JavaScript に
nullはおよび値がありますundefined。
参照
参考文献
- ^ 「Null 許容型 (C#)」。Msdn.microsoft.com。2013年 8 月 19 日閲覧。
- ^ ab Skeet, Jon (2019年3月23日). C# in Depth . Manning. ISBN 978-1617294532。
- ^ 「(luKa) Developer Zone - NullableTypes」。Nullabletypes.sourceforge.net 。 2013年8月19日閲覧。
- ^ "NullableTypes". Nullabletypes.sourceforge.net . 2013年8月19日閲覧。
- ^ Tony Hoare (2009)。「Null 参照: 10 億ドルの損失」。QCon London。
- ^ 「オプション型 - Ballerina プログラミング言語」。
- ^ BillWagner. 「Null 許容値型 - C# リファレンス」. docs.microsoft.com . 2021 年 10 月 5 日閲覧。
- ^ 「サウンドヌルセーフティ | Dart」。
- ^ 「Null 安全性 - Kotlin プログラミング言語」。
- ^ KathleenDollard. 「Nullable Value Types - Visual Basic」. docs.microsoft.com . 2021 年 10 月 5 日閲覧。
- ^ 「PHP: RFC:nullable_types」.
- ^ 「組み込み定数 — Python 3.9.5 ドキュメント」。
- ^ 「型 · Julia 言語」。
