Closed4

PHPとJavaScriptのnull合体演算子をまとめる

あーるあーる

はじめに

PHPとJavaScriptでnull合体演算子を使う機会が増えてきたので挙動について一旦整理する。
null合体演算子(??)はNullish coalescing operatorとも呼ばれる。

あーるあーる

PHP

まずはPHPから。

公式ドキュメントはこちら

https://www.php.net/manual/ja/migration70.new-features.php#migration70.new-features.null-coalesce-op

PHP7からの新機能として紹介されている。7系以前のバージョンではエルビス演算子やissetによる判定と分岐が主流だった。

GETパラメーターnameがnullでなければ値を取得、なければnullを$hogeに代入する例。

$name = $_GET['name'] ?? null;

これは以下と等価である。

$name = isset($_GET['name']) ? $_GET['hoge'] : null; 

issetを利用した三項演算子の糖衣構文(シンタックスシュガー)になっている。
PHPではnull合体演算子で未定義の変数を指定してもNoticeエラーが発生しないという特徴がある。
挙動としては!is_nullでの判定に近い。nullでなければ値を左辺を返し、右辺を返すというイメージ。
省略できる上にコードが見やすくなるので使える場面ではどんどん取り入れていきたい。

??で連結して増やすこともできる。

あーるあーる

JavaScript

次にJavaScript(JS)

MDN

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator

JSでは左辺の値がnullまたはundefinedの場合に右辺を返す挙動をする。

let name;
const userName = name ?? 'guest';

上の例ではnameという変数はunderfinedとなりuserNameguestが代入される。これは以下と等価であり糖衣構文(シンタックスシュガー)である。

let name;
const userName = name != null ? name : 'guest';

||(or演算子)との挙動と間違えやすいのでとくに注意が必要。

// or演算子の場合 左辺がfalsyになるので右辺の1が返される
const userNum = 0 || 1; 
console.log(userNum)
1

// null合体演算子の場合 左辺の0はnull・underfinedにならないため左辺の0が返される
const userNum2 = 0 ?? 1;
console.log(userNum2);
0
あーるあーる

null合体演算子は便利

多くの言語でnull合体演算子が使えるようになっているため、しっかりと挙動を理解した上で使えばとても便利である。言語によって挙動が微妙に異なるため意図しないバグを生み出さないよう使い方の確認をしっかりと行いたい。

このスクラップは2022/07/01にクローズされました