プログラミングとスターウォーズ・・・キーマンはヨーダ

カテゴリ: WEB、WEBシステム関連 / 公開日: 2013年10月14日(月曜)17:44 / 投稿者: Tom Goodsun

日本ではあまり馴染みが無いのかもしれないけどプログラミングには「ヨーダ記法」(Yoda notation)あるいは「ヨーダ式」(Yoda condition)という書き方がある。
「ヨーダ」とはスターウォーズにでてくる、あのヨーダだ。
あまりスターウォーズを見たことがないのだけど、ヨーダはちょっと古風(?)な英語の言い回しをする。
そこから名付けられたヨーダ記法とは。

例えばPHPで、ifの判定式でgetNum()の結果を判定使用した時のことである。

function getNum() { return rand(0, 9); }
$num = getNum();

1の時だけ結果を出力する。

if ($num == 1) echo "Number is 1.";

これだと以下のように書き間違えてしまう可能性がある。演算子は間違っているが、プログラム的に問題なく実行されてしまうことに注目してもらいたい。

if ($num = 1) echo "Number is 1.";

結果的に$numの中は1となって、出力結果が同じになるわけだが、「1かどうかを検査したい」という目的からはそれている。
そこで、ヨーダ記法では以下のように書くことを推奨する。

if (1 == $num) echo "Number is 1.";

これだと

if (1 = $num) echo "Number is 1.";

はエラーとなるので、間違えようがないというのだ。

ただプログラマからするとちょっと気持ち悪い。
プログラマ的には条件の対象となる値は左辺に、条件の値を右辺に書きたい。これは「Does $num equal to 1?」といった英語の文法に関わっていると思う。
ヨーダ記法だと「Does 1 equal to $num?」となる。変ではないが、「1は$numと等しいか?」とするより「$numは1と等しいか?」とするほうがわかりやすい。

これ自体否定はできないが、私がこれを見た時、やはり見づらいなと思うだろう。