Nullable型

Nullable型、Null許容型 () は、一部のプログラミング言語の機能であり、 データ型の通常の値の代わりに、値を特殊な値Nullに設定できる。静的型付け言語では、Nullable型はOption型だが、動的型付け言語（値には型があるが変数にはない）では、単一のnull値を持つことで同等の動作が提供される。
Nullは、SQLにおけるNULLのように、返されなかった関数やデータベースのフィールドの欠落などから、欠落した値または無効な値を表すためによく使用される。
整数型やブーリアン型などのプリミティブ型は通常nullにすることはできないが、対応するNullable型（Nullable整数およびNullableブーリアン型）はNull値をとることができる。
例.
整数変数は（有限範囲の）整数を表すが、0 (ゼロ) を特殊なケースとして扱うことがある。これは、C言語を始めとする多くのプログラミング言語で、0が真偽値の "false" を意味する場合があるためである。ただし、これは変数が空（無効）であることが明示されず、有効な値としての0と区別ができないという欠点があるが、多くの状況では区別が必要になる。これを実現するのがNullable型である。
C#ではクラスなどの参照型はnull値をとることができるものの、組み込みの整数型などに代表される構造体のような値型（から派生する特殊なオブジェクト型）はnull値をとることができない。C# 2.0以降では、たとえば、Nullable整数は疑問符を用いて で宣言できる。は内部的にはジェネリクス型のエイリアスであり、前記の例は として展開される。ジェネリクス機能を持たないC# 1.0では、いくつかのユーザー定義のNullable型を提供する外部ライブラリもあった（例: NullableInteger、NullableBoolean）。
ブール変数は効果がより明確に表れる。値は "true" または "false" のいずれかだが、Nullableブール値には "undecided"（未決定）の表現も含まれる場合がある（3値論理）。ただし、そのような変数を含む論理演算の解釈または処理は、言語によって異なる。
Javaには、codice_1、codice_2、codice_3などの（null値をとることができない）各プリミティブ型に対応する、、などのプリミティブラッパークラスがあり、これらはnull値をとることができるため、Nullable型の代用として利用できる。さらに自動ボックス化（オブジェクトと値の間の使用法に基づく自動変換）と組み合わせることで効果を発揮する。
nullポインタとの比較.
プリミティブ型とは対照的に、オブジェクトポインタまたはオブジェクト参照は、ほとんどの一般的な言語ではデフォルトでNULLに設定できる。これは、ポインタまたは参照がどこも指さないこと、オブジェクトが割り当てられないこと（変数がオブジェクトを指さないこと）を意味する。Nullable参照は、1965年にアントニー・ホーアによって言語の一部として発明された。ホーアは後に彼の発明を「10億ドルの間違い」と表現した。これは、NULLの可能性があるオブジェクトポインタは、ユーザがポインタを使用する前に確認する必要があり、オブジェクトポインタがNULLの場合を処理するために特定のコードが必要になるためである。
逆に後発の言語では、既定でオブジェクト型を非Null許容 (non-nullable) とし、Nullableにするためには追加のコード（変数宣言時の型修飾や利用前のNullチェックの記述など）が必要となるものが多い。非Nullable型と静的なコード解析を組み合わせることで「Null安全」(null safety) を実現している。
Option型との比較.
Nullable型の実装は通常、に従う。
Nullable型の概念を拡張する、より一般的で厳格な概念があるが、これは例外的なケースの明示的な処理を強制するOption型に由来するものである。Option型の実装は、通常は特殊なケースパターン（Special Case pattern）に従う。
言語ごとのサポート.
次のプログラミング言語は、Nullable型をサポートしている。
ネイティブ（言語組み込み）でのNullableサポートのある静的型付け言語には、次のものがある。内部的には標準ライブラリによってジェネリック型として実装されており、それを利用する糖衣構文として用意されていることも多い。
ライブラリによってNullableをサポートする静的型付け言語には、次のものがある。
nullを含む動的型付け言語には、次のものがある。