null合体演算子とは
null合体演算子とは、
プログラミング言語において、ある変数がnull(または未定義)である場合に、別の値を返すための演算子です。これにより、nullチェックを簡潔に記述でき、コードの可読性を向上させることができます。C#、
Perl、Swiftなど、多くの言語でサポートされており、それぞれ異なる記号で表現されます。
各言語での実装例
C#
C#では、null合体演算子は `??` で表されます。
csharp
string title = pageTitle ?? "Default Title";
この例では、`pageTitle` が null の場合、`title` には "Default Title" が代入されます。これは、以下の冗長なコードと同等の処理を行います。
csharp
string title;
if (pageTitle != null)
{
title = pageTitle;
}
else
{
title = "Default Title";
}
CFML
ColdFusion (CFML) では、三項演算子 `?:` を用いてnull合体演算子を実装します。
cfml
Perlでは、null合体演算子は `//` で表されます。
perl
my $title = $possibly_null_value // $value_if_null;
`$possibly_null_value` が未定義の場合、 `$value_if_null` が返されます。これは、三項演算子 `?:` を用いた以下のコードと同等です。
perl
my $title = defined($possibly_null_value) ? $possibly_null_value : $value_if_null;
Swift
Swiftでは、null合体演算子は `??` で表されます。Optional型のアンラップ時にデフォルト値を提供するために使用されます。
swift
let title = pageTitle ?? "Default Title"
SQL
SQLでは、言語によって異なる関数で同様の機能が提供されます。
Oracle: `NVL(column, 'default')`
SQL Server: `ISNULL(column, 'default')`
ANSI SQL: `COALESCE(column, 'default')`
PHP
PHP 7以降では、null合体演算子 `??` が利用できます。
php
$title = $pageTitle ?? "Default Title";
PHP 5.3以降では、三項演算子 `?:` の中間部分を省略することで同様の処理が可能でしたが、`??` 演算子の方がより明確で安全です。
ECMAScript 2020では、null合体演算子 `??` が導入されました。
javascript
const title = pageTitle ?? "Default Title";
他の演算子での再現
null合体演算子がない言語でも、他の演算子を組み合わせることで同様の機能を実装できます。
条件演算子 (`?:`): 多くの言語で、条件演算子を用いて null チェックを行い、結果を返すことができます。
論理OR演算子 (`||`): null を false とみなす言語では、論理OR演算子の短絡評価を利用して同様の処理を実現できます。
エルビス演算子
エルビス演算子 `?:` は、nullではなく false をチェックする演算子ですが、null を false とみなす言語では、null合体演算子のように使用できます。KotlinやGroovyなどで利用されます。
注意点
論理OR演算子をnull合体演算子として使用する場合、0や空文字列など false と評価される値もデフォルト値に置き換えられてしまうため、注意が必要です。
JavaScriptやPythonで条件演算子を模倣する際は、プリミティブ型との組み合わせで予期せぬ挙動になる場合があります。
まとめ
null合体演算子は、コードを簡潔にし、可読性を向上させるための強力なツールです。各言語での実装例を理解し、適切に活用することで、より効率的なプログラミングが可能になります。また、null合体演算子がない言語でも、他の演算子を組み合わせて同様の処理を実現できることを覚えておくと良いでしょう。
関連項目
条件演算子: `? :`
Null条件演算子: `?.`
エルビス演算子: `?:`