Null条件演算子

Null条件演算子とは



Null条件演算子とは、プログラミング言語において、ある値がnull(ヌルポインタまたはヌル参照)でない場合にのみ、後続の処理を実行する演算子です。もし値がnullである場合は、その時点で処理を中断し、結果としてnullを返します。

この演算子の主な目的は、nullチェックの記述を省略し、より安全にメソッドチェーンやプロパティチェーンを行うことです。通常のメンバーアクセス演算子(例:`.`)では、対象がnullの場合にエラーが発生しますが、Null条件演算子を使用すると、このエラーを回避できます。

様々な名称



Null条件演算子は、言語によって異なる名称で呼ばれることがあります。例えば、

safe navigation operator
optional chaining operator
safe call operator

といった名称が用いられます。ただし、英語圏では `safe navigation operator` が広く使われています。

Null条件演算子の利点



Null条件演算子の最大の利点は、nullチェックの記述を簡略化し、コードの可読性を向上させることです。従来のnullチェックでは、ネストが深くなりやすい(いわゆる「ピラミッド・オブ・ドゥーム」)という問題がありましたが、Null条件演算子を使うことで、これを回避できます。

各言語での実装例



以下に、いくつかのプログラミング言語におけるNull条件演算子の実装例を示します。

C#


C#では、バージョン6.0以降で `?.` および `?[]` という記法でNull条件演算子がサポートされています。

csharp
articles?.FirstOrDefault()?.Author?.Name


VB.NET


VB.NETでは、バージョン14以降で `?.` および `?()` という記法でNull条件演算子がサポートされています。

vb.net
articles?.FirstOrDefault()?.Author?.Name


Groovy


Groovyでは、safe navigation operatorとして `?.` が利用できます。

groovy
articles?.find { it.author }?.author?.name


Objective-C


Objective-Cでは、通常の`.`演算子をnullを考慮せずに使用できる場合があります。

Swift


Swiftでは、optional chaining operatorとして `?.` が、optional subscript operatorとして `?[]` が利用できます。

swift
articles?.first?.author?.name


Ruby


Rubyでは、バージョン2.3.0以降でsafe navigation operatorとして `&.` が利用できます。この演算子は「ぼっち演算子」とも呼ばれます。

ruby
articles&.first&.author&.name


Kotlin


Kotlinでは、safe call operatorとして `?.` が利用できます。

kotlin
articles?.firstOrNull()?.author?.name


Perl 6


Perl 6では、safe method callとして `?.` が利用できます。

JavaScript


JavaScriptでは、ECMAScript 2020以降でoptional chaining operatorとして `?.` がサポートされています。

javascript
articles?.at(0)?.author?.name


コード例の前提条件



上記のコード例では、以下の変数を前提としています。

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

関連項目



条件演算子 (`? :`)
Null合体演算子 (`??` など)
* エルビス演算子 (`?:`)

Null条件演算子は、安全なプログラミングを行う上で非常に重要なツールです。適切に活用することで、より堅牢で可読性の高いコードを書くことができるでしょう。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。