BLOGブログ
ヨーダ記法 とスターウォーズの関係
もうすぐスターウォーズ公開されますね。
公開されるスターウォーズとは無関係ですが、条件文の記述の仕方でヨーダ記法というものがあります。
ヨーダ記法はプログラムの記述誤りを防ぐ書き方です。
最近はIDEが進歩したので、この書き方をする方やプロジェクトのコーディングルールに適用されることはないと思いますが、豆知識的に説明します。
普通変数の値が、この値かをチェックするとき、左辺に変数、右辺に比較したい固定値を記述します。
1 2 3 4 5 6 |
var a = 9; if (a == 10) { console.log("Value is 10"); } else { console.log("Value is not 10"); } |
当然、結果は「Value is not 10」
でも、うっかり下記のように条件式を「a = 10」って書いたらどうでしょう?
1 2 3 4 5 6 |
var a = 9; if (a = 10) { console.log("Value is 10"); } else { console.log("Value is not 10"); } |
javascript だと if文の条件式に代入分を書けるのでエラーとならずに、「Value is 10」となってしまいます。
そこで、ヨーダ記法
if 文内の 左辺を右辺を入れ替えると……。
1 2 3 4 5 6 |
var a = 9; if (10 = a) { console.log("Value is 10"); } else { console.log("Value is not 10"); } |
「Uncaught ReferenceError: Invalid left-hand side in assignment」
割当無効な左辺だよ、とエラーを教えてくれます。
もちろん
if (10 == a)と記述すれば正しく動作します。
実際、ヨーダ記述で恩恵を受けられるのは、C、C+、PHP、javascriptみたいです。
(javaやC#は、if文内での代入ができません)
rubyは、実行できるが本当に代入?っと警告がでる仕様
「-e:1: warning: found = in conditional, should be ==」
左辺に変数がある条件式を当然のように目にしているので、ヨーダ記述は、とても違和感があります。
ただ、CやC+でコーディングして、IDEも機能が少ない時代の良い知恵だと思います。
今は、そんなコード記述をすることはないと思いますが、ネタ的(スターウォーズが公開されるんで)に書きました。
ではでは。