コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Null条件演算子

出典: フリー百科事典『ウィキペディア(Wikipedia)』
条件演算子 > 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 operatoroptional chaining operatorsafe call operatornull-conditional operatorなど様々な名称で呼ばれ、共通した名称はないが、英語圏においてはsafe navigation operatorが広く用いられる。

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

[編集]

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

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

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

脚注

[編集]
  1. ^ 6.1. Safe navigation operator”. 2016年1月28日閲覧。
  2. ^ Optional Chaining”. 2016年1月28日閲覧。
  3. ^ Ruby 2.3.0 Released”. 2016年1月28日閲覧。
  4. ^ a b メンバー アクセス演算子と式 - C# リファレンス”. Microsoft Docs. 2021年4月17日閲覧。
  5. ^ a b Null 条件演算子 - Visual Basic”. Microsoft Docs. 2021年4月17日閲覧。
  6. ^ Null Safety”. 2016年1月28日閲覧。
  7. ^ 新機能 - Visual Basic | Microsoft Docs
  8. ^ 6.1. Safe navigation operator”. 2016年1月28日閲覧。
  9. ^ Optional Chaining”. 2016年1月28日閲覧。
  10. ^ NEWS for Ruby 2.3.0”. 2017年2月26日閲覧。
  11. ^ Ruby 2.3.0 Released” (英語). 2016年1月28日閲覧。
  12. ^ Null Safety”. 2016年1月28日閲覧。
  13. ^ Perl 6 Operators”. 2016年6月28日閲覧。
  14. ^ Optional chaining (?.) - JavaScript”. 2021年6月17日閲覧。

関連項目

[編集]