Null条件演算子 () とは、第一項がnull(ヌルポインタ: またはヌル参照: )でない場合に第二項の結果を返し、nullである場合にnullを返す演算子である。nullでないことのチェック処理の記述を回避し、安全にメソッドチェーンやプロパティチェーンを行うために用いられる。メンバーアクセス演算子.は第一項がnullの場合に実行時エラー(例えばJavaの場合NullPointerException)が発生するが、Null条件演算子の場合はnullの検出が自動化され、以降のメソッド呼び出しやフィールド/プロパティの評価を行わずにnullをその結果として返す。Null条件演算子はGroovy、Swift、Ruby、C#、VB.NET、Kotlin、CoffeeScriptなどで実装されている。Null条件演算子は言語によってsafe navigation operator、optional chaining operator、safe call operator、null-conditional operatorなど様々な名称で呼ばれ、共通した名称はないが、英語圏においてはsafe navigation operatorが広く用いられる。

Null条件演算子を使用する主な利点は、nullチェック時に過剰にネストが深くなる問題 () を回避できることである。

例 特に断りがない限り、コード例における各シンボルは以下の条件であるとする。

articles変数: Articleクラス型の配列 Articleクラス: Personクラス型のプロパティまたはフィールドとしてAuthor or authorを持つ Personクラス: 文字列型のプロパティまたはフィールドとしてName or nameを持つ

C# C#は6.0以降でnull条件演算子?.、?[]をサポートする。

string name = articles??.Author?.Name;

VB.NET VB.NETは14以降でnull条件演算子?.、?()をサポートする新機能 - Visual Basic | Microsoft Docs。

Dim name As String = articles?(0)?.Author?.Name

Groovy safe navigation operator: def name = article?.author?.name

Objective-C 多くの場合で通常の.演算子をnullを考慮しないで表記することができる。 NSString *name = article.author.name;

Swift optional chaining operator: let name = article?.author?.name

optional subscript operator: let author = articles?.author

Ruby Rubyは2.3.0よりsafe navigation operatorをサポートし、&.と表記する。ぼっち演算子 (lonely operator)という名称も与えられている。

name = article&.author&.name

Kotlin safe call operator:

val name = article?.author?.name

Perl 6 safe method call:

my $name = $article.?author.?name;

JavaScript ECMAScript 2020以降でオプショナルチェイニング(Optional chaining)演算子をサポートする。

const name = articles?.?.author?.name

脚注

関連項目 条件演算子: ? : Null合体演算子: ?? など エルビス演算子: ?: