Closed4
PHPとJavaScriptのnull合体演算子をまとめる
![あーる](https://res.cloudinary.com/zenn/image/fetch/s--Wyi5mEm_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/10455d524d.jpeg)
はじめに
PHPとJavaScriptでnull合体演算子を使う機会が増えてきたので挙動について一旦整理する。
null合体演算子(??)はNullish coalescing operator
とも呼ばれる。
![あーる](https://res.cloudinary.com/zenn/image/fetch/s--Wyi5mEm_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/10455d524d.jpeg)
PHP
まずはPHPから。
公式ドキュメントはこちら
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でなければ値を左辺を返し、右辺を返すというイメージ。
省略できる上にコードが見やすくなるので使える場面ではどんどん取り入れていきたい。
??
で連結して増やすこともできる。
![あーる](https://res.cloudinary.com/zenn/image/fetch/s--Wyi5mEm_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/10455d524d.jpeg)
JavaScript
次にJavaScript(JS)
MDN
JSでは左辺の値がnull
またはundefined
の場合に右辺を返す挙動をする。
let name;
const userName = name ?? 'guest';
上の例ではnameという変数はunderfined
となりuserName
にguest
が代入される。これは以下と等価であり糖衣構文(シンタックスシュガー)である。
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
![あーる](https://res.cloudinary.com/zenn/image/fetch/s--Wyi5mEm_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/10455d524d.jpeg)
null合体演算子は便利
多くの言語でnull合体演算子が使えるようになっているため、しっかりと挙動を理解した上で使えばとても便利である。言語によって挙動が微妙に異なるため意図しないバグを生み出さないよう使い方の確認をしっかりと行いたい。
このスクラップは2022/07/01にクローズされました