ヨーダ記法ってなんか見慣れない

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

プログラムのソースコードを見ていると、時折if (foo == 10)という書き方ではなく、if (10 == bar)という書き方をするケースが見られる。これを「ヨーダ記法」というそうなのだが、個人的には「〜以上〜以下」というような条件式の使い方を除き、個人的にはほとんどヨーダ記法を書かないというのもあってか、かなり見慣れない使い方だなという印象がある。

さて、「ヨーダ記法」だが、これは、「スター・ウォーズ」のヨーダが、独特の倒置表現を使った英語を使っていたということに由来するという。

プログラミングにおいて、比較演算文を使う場合、主となる変数をfooとし、定数及び期待値をbarとした場合、通常は変数fooを左に置き、barは右に置くのが一般的である。一方、ヨーダ構文ではそれとは逆に、定数及び期待値barを左に置き、変数fooを右に置くという記法になっている。

例えば、通常は以下のように書くのに対し、

int foo = arc4random() % 10;
if (foo == 5) {
    doSomething();
}

ヨーダ記法では以下のように書く。

int foo = arc4random() % 10;
if (5 == foo) {
    doSomething();
}

この場合、比較演算子==はしばしば代入を意味する=と誤記することがあり、万が一if (foo == 5)if (foo = 5)と書いてしまった場合、通常の記法では意図せぬ代入が発生してしまうということがある。一方、ヨーダ記法では期待値が定数である限り、必ずエラーが発生するというので、その点で利点があるとは言える。とはいえ、可読性が優れているかというと個人的には疑問ではあるが。

なお、最近のプログラミング言語では条件文中の代入を許容しないようにすることで意図せぬ代入を防ぐ言語があるほか、C言語などでも最近のコンパイラーでは条件文中に代入があった場合に警告を発するようになっており、ヨーダ記法のメリットは今日では薄まっているものと考えられる。

なお、〜以上〜以下を表す場合、以下のような使い方はありうる。

int foo = arc4randon() % 20;
if (5 <= foo && foo <= 15) {
    doSomething();
}

これも、部分的にヨーダ記法の書き方をしているところがあるが、「fooが5〜15のいずれかであれば」という意味合いを考えるとむしろわかりやすいと考えられるので、こういった使い方はあっても良さそうに考えられる。

ヨーダ記法は言語にもよって温度差はあるものの、個人的にはかなり見慣れない部分は大きい。とはいえ、使い所を見極められるのであれば、かなり有効なのかもしれない。

タイトルとURLをコピーしました