みんな使おう!エルビス演算子が長年のnullチェックを解決してくれた!

投稿日: 2017/10/19  更新日: 2017/10/20

JavaScript 




エルビス演算子とは

?:のことです。

プログラムの演算子のひとつで、PHPJavaScriptなど様々な言語がサポートしています。


私はつい最近これを知って、プログラミングがかなり捗るようになりました

みなさんにも便利さを知ってもらいたく、エルビス演算子を紹介します。


ちなみにJavaScriptの方は論理演算子||を使います。


エルビス演算子の由来

往年の大スターであるエルビス・プレスリーの顔文字に似ているのが由来だそうです。

日本でその顔文字は馴染みがないと思いますが、エルビス・プレスリーをご存知の方は多いはず。

私のボキャブラリー的には、エルビス演算子と聞いて真っ先に思いついた人物だったのですが、やはり由来も思った通りでしたね。


5:-) エルビス・プレスリーの顔文字
?: エルビス演算子

似てるかな?!


実際のプレスリーの顔文字はクエスチョンマークではなく数字の5なんですね......


ずばりどう動くのか

A ?: Bは、A ? A : Bと同じ意味です。

後者は三項演算子ですね。


つまり、エルビス演算子は三項演算子をシュッとしたものです。


もう少しちゃんとした言い方だと、


Aの評価が真(true)のとき、Aの結果が返る。

偽(false)のとき、Bの結果が返る。


です。


パッと見てコード量が少なくて良いですね。

でもエルビス演算子の良さはそれだけではありません。

真の良さは、三項演算子でいうところの第二項が実行されないところにあります。


実際にコードを書いてみます。



エルビス演算子の使い方

代入時に使うと便利

私が実際にプログラミングするとき、エルビス演算子や三項演算子は代入のときに良く使います。

Nullチェックやフォーマット変換失敗チェックをわざわざ書かなくて良くなるためです。


例えば、


変数Aに値があれば変数Aを使う。

なければ変数Bを使う。


その場合、有効な使い方ができます。


// 変数の代入
変数 = A ?: B;

// 関数の結果を代入
変数 = funcA() ?: funcB();

三項演算子を使った場合

上のコードを三項演算子を使って書くと、次のようになります。


// 変数の代入
変数 = A ? A : B;

// 関数の結果を代入
変数 = funcA() ? funcA() : funcB();

このコードでは、funcA()が2回実行されてしまいますので、少し改良してみます。


// 変数の代入
変数 = A ? A : B;

// 関数の結果を代入
C = funcA();
変数 = C ? C : funcB();

改良版では、一度変数Cに格納することで、関数が余計に実行されるのを防いでいます。

ですがこれではコードも増えますし、メモリも余計に使うことになってしまいますね。


たまに三項演算子を禁止している規約を見受けます。

恐らくこの冗長なところが禁止の理由なのではと私は思います。


その点、エルビス演算子は冗長なコードを書かない上に、余計に実行されることも避けられます。

とても良い感じですね。


演算子を使わない場合

さらに、演算子を使わないコードも書いてみましょう。


// 変数の代入
変数定義;
if (A) {
  変数 = A;
} else {
  変数 = B;
}

// 関数の結果を代入
変数定義;
C = funcA();
if (C) {
  変数 = C;
} else {
  変数 = funcB();
}

入門書だと見慣れた形でしょうか。

誰にでも分かるコードを目指すならば、この場合だとエルビス演算子の良さはあまり感じられないかもしれませんね。


しかし実際のプログラミングでは、もっと様々な処理がありコード量も多いので、レガシーであればあるほど読みづらくなってしまいます

それならまだ三項演算子の方がよっぽど読みやすいですね。


Nullチェックやフォーマット変換するならエルビス演算子

これは特に初期値を設定するときに役立ちます


例えば、次のような場合です。

  • nullundefinedを画面に表示させたくない
  • フォーマット変換に失敗したらデフォルト値を表示したい

このような場合にエルビス演算子を使いましょう。


例えば次のようなコードです。※色々言語ミックス


// 変数に値がない場合、空文字を設定
変数 = A ?: '';

変数 = A || '';

// 数字じゃなかったら0を設定
変数 = isNaN(Number(A)) || 0

これで今まで書いていたif文や一時的な変数がなくなり、スッキリするでしょう。


まとめ

  • 名前の由来はエルビス・プレスリー
  • 三項演算子をシュッとしたもの
  • 初期値を設定するとき大活躍

いかがでしたか?


エルビス演算子を使うと、コードがスッキリして読みやすくなります


みなさんもぜひ使ってみて
「今までなんでこんなに冗長なコードを書いていたんだろう?」
と感じてもらえたら嬉しいです。




このエントリーをはてなブックマークに追加     

profile
profile

洋ちゃん

@c5apple

システムエンジニアをしています。二児の父です。

夢は天井から床までビッシリ並んだ本棚のある書斎を作ること!