Null条件演算子
Null条件演算子 (英: null-conditional operator) とは、第一項がnull(ヌルポインタ: null pointerまたはヌル参照: null reference)でない場合に第二項の結果を返し、nullである場合にnullを返す演算子である。nullでないことのチェック処理の記述を回避し、安全にメソッドチェーンやプロパティチェーンを行うために用いられる。メンバーアクセス演算子.
は第一項がnullの場合に実行時エラー(例えばJavaの場合NullPointerException)が発生するが、Null条件演算子の場合はnullの検出が自動化され、以降のメソッド呼び出しやフィールド/プロパティの評価を行わずにnullをその結果として返す。Null条件演算子はGroovy[1]、Swift[2]、Ruby[3]、C#[4]、VB.NET[5]、Kotlin[6]、CoffeeScriptなどで実装されている。Null条件演算子は言語によってsafe navigation operator、optional chaining operator、safe call operator、null-conditional operatorなど様々な名称で呼ばれ、共通した名称はないが、英語圏においてはsafe navigation operatorが広く用いられる。
Null条件演算子を使用する主な利点は、nullチェック時に過剰にネストが深くなる問題 (pyramid of doom) を回避できることである。
例
[編集]特に断りがない限り、コード例における各シンボルは以下の条件であるとする。
articles
変数:Article
クラス型の配列Article
クラス:Person
クラス型のプロパティまたはフィールドとしてAuthor
orauthor
を持つPerson
クラス: 文字列型のプロパティまたはフィールドとしてName
orname
を持つ
C#
[編集]C#は6.0以降でnull条件演算子?.
、?[]
をサポートする[4]。
string name = articles?[0]?.Author?.Name;
VB.NET
[編集]VB.NETは14以降でnull条件演算子?.
、?()
をサポートする[5][7]。
Dim name As String = articles?(0)?.Author?.Name
Groovy
[編集]safe navigation operator:[8]
def name = article?.author?.name
Objective-C
[編集]多くの場合で通常の.
演算子をnullを考慮しないで表記することができる。
NSString *name = article.author[0].name;
Swift
[編集]optional chaining operator:[9]
let name = article?.author?.name
optional subscript operator:
let author = articles?[0].author
Ruby
[編集]Rubyは2.3.0よりsafe navigation operatorをサポートし、&.
と表記する。ぼっち演算子[10] (lonely operator[11])という名称も与えられている。
name = article&.author&.name
Kotlin
[編集]safe call operator:[12]
val name = article?.author?.name
Perl 6
[編集]safe method call:[13]
my $name = $article.?author.?name;
JavaScript
[編集]ECMAScript 2020以降でオプショナルチェイニング(Optional chaining)演算子をサポートする[14]。
const name = articles?.[0]?.author?.name
脚注
[編集]- ^ “6.1. Safe navigation operator”. 2016年1月28日閲覧。
- ^ “Optional Chaining”. 2016年1月28日閲覧。
- ^ “Ruby 2.3.0 Released”. 2016年1月28日閲覧。
- ^ a b “メンバー アクセス演算子と式 - C# リファレンス”. Microsoft Docs. 2021年4月17日閲覧。
- ^ a b “Null 条件演算子 - Visual Basic”. Microsoft Docs. 2021年4月17日閲覧。
- ^ “Null Safety”. 2016年1月28日閲覧。
- ^ 新機能 - Visual Basic | Microsoft Docs
- ^ “6.1. Safe navigation operator”. 2016年1月28日閲覧。
- ^ “Optional Chaining”. 2016年1月28日閲覧。
- ^ “NEWS for Ruby 2.3.0”. 2017年2月26日閲覧。
- ^ “Ruby 2.3.0 Released” (英語). 2016年1月28日閲覧。
- ^ “Null Safety”. 2016年1月28日閲覧。
- ^ “Perl 6 Operators”. 2016年6月28日閲覧。
- ^ “Optional chaining (?.) - JavaScript”. 2021年6月17日閲覧。