プログラミング初心者向け

ヨーダ記法を10年使った僕がメリットとデメリットを紹介する

ヨーダ記法

ヨーダ記法って知っていますか?

ヨーダ記法とは条件式を「if (変数 == 値)」ではなく、「if (値 == 変数)」という順番で記述する記法です。

僕は社会人になって初めて参加したプロジェクトのコーディング規約で、条件式は「if (値 == 変数)」と書くように決まっていました。

なのでこの記法が体に染み付いてしまったのですが、一般的にはマイナーな記法。ちなみにこれがヨーダ記法って名前が付いてるのは最近知りました。

今回は、この「ヨーダ記法」について僕が10年間使い倒して感じたメリットやデメリットを紹介します。

ヨーダ記法とは?

最初にヨーダ記法について説明します。

ヨーダ記法とはプログラムで条件式の比較値を左辺に記述する記法です。

通常、プログラムの条件式は「if (変数 == 定数)」のような形で記述しますが、ヨーダ記法ではこれを「if (定数 == 変数)」と記述します。

以下、具体例をいくつか紹介。

ヨーダ記法で書いた条件文の例

// ヨーダ記法の例
// 左辺に比較する定数、右辺に比較対象を書く
if (0 < str.length)
if (undefined != obj.name)
if (null != data)
if (20 <= age)

どうです?不自然な感じがしたでしょうか?

このように、ヨーダ記法では判定に使う定数を左辺に持ってくるため、そのままコードを読むと、「0はstr.lengthより小さい」とか「undefinedはobj.nameじゃない」とかになります。わけわかりませんね。

僕はヨーダ歴10年なんで自然に読めるのですが、一般的には読み辛く直感的じゃないと言われています。

ヨーダ記法の由来

ヨーダ記法という名前の由来は映画「スターウォーズ」に出てくる「ヨーダ」というキャラクターが由来らしいです。この緑のおじちゃんがヨーダ。

僕も調べて初めて知りました。どうやらこの「ヨーダ」というキャラクター、倒置法っぽい喋り方をするらしくそこからこの記法がヨーダ記法と呼ばれるようになったとか。

せいや

確かにヨーダ記法って倒置法っぽい書き方だね。

ヨーダ記法を取り入れてるプロジェクト

ヨーダ記法はなんとWordPressのプロジェクトで採用されているそうな。

マユツバだと思ってGitHubでWordPressのコードを見たらホントに使われていました。

ヨーダ記法を使っているプロジェクトって多分珍しいと思う。

ヨーダ記法のメリット

ヨーダ記法のメリット

何でこんな回りくどくて分かりにくい記法が存在するのか。

いやいや、ヨーダ記法にもメリットはあるんですよ。太古の昔、先人達がヨーダ記法を生み出したのは以下のメリットを享受するため。

メリット
  • IF構文の誤りを回避できる
  • パッと見で条件式を理解しやすい

それぞれ詳しく解説します。

IF構文の誤りを回避できる

よくヨーダ記法のメリットとして言われているのがこれ。IF構文の誤り回避。

例えば以下のような、変数fruitが「りんご」だったときにアラートを出すプログラムがあったとします。

// フルーツがりんごかどうか判定
var fruit = 'バナナ';
if (fruit == 'りんご') {
    alert(fruit);
}

上のプログラムはアラートは出ません。fruitが「バナナ」だからですね。
では条件式の「==」を誤って「=」にしてしまった場合はどうでしょうか。

// 「==」を誤って「=」にしてしまった場合
var fruit = 'バナナ';
if (fruit = 'りんご') {
    // fruitにりんごが代入され、if条件文も合致する
    alert(fruit);
}

この場合アラートが出力され、しかも「りんご」と表示されます。

なぜこのようなことが起きるかというと、if条件式の中の「fruit = 'りんご'」が評価されfruitにりんごが代入されてしまうんですね。
そして代入成功でtrueが返るためif条件式に合致しブロック内部の処理を実行します。

このバグ、ヨーダ記法なら回避できるんです。以下を見てください。

// ヨーダ記法を用いた例
var fruit = 'バナナ';
if ('りんご' = fruit) {
    // 'りんご'にfruitを代入しようとしてエラーになる
    alert(fruit);
}

ヨーダ記法では条件式を「定数 == 変数」の形で記述するので、例えばミスって「==」を「=」にしてしまった場合でも定数に変数を代入しようとしてエラーになります。

とまぁ、そんな間違いしねーよ!とか、そもそも言語によっては条件式の中での代入演算はエラーになるよ!とかありますので、大したメリットじゃなくない?って意見が主流です。僕もそう思います。

そんなことよりも、次に紹介するメリットが僕としては一番大事。

パッと見で条件式を理解しやすい

これこれ、これがあるから積極的にヨーダしてると言っても過言ではないメリット。

「パッと見で条件式を理解しやすい」

例えば、次のような感じ。

// 一瞬でnullチェックだってわかる
if (null != data[index][id])

// 一瞬でエラーチェックだってわかる
if (-1 == status)

// 一瞬でデータの0チェックだってわかる
if (0 < data.length)

このようにヨーダ記法では大事なことが左辺に来るので、条件式で何を問うているのか理解するスピードが上がります。

言い換えればヨーダ記法とは結論を先に述べる記法であり、結論がわかっているからこそその条件式の読みやすさが上がります。

せいや

プログラムって書くより読む時間の方が圧倒的に長いですから、その理解スピードが上がるのは強いですよ。

ヨーダ記法のデメリット

僕はヨーダ記法好きなんで、贔屓してしまっていますがデメリットももちろんあります。

よく言われるデメリットは以下。

デメリット
  • 直感的に分かりにくい
  • マイナー記法のためそもそも使えないことが多い

直感的に分かりにくい

「何だ、さっき分かりやすいって言ったじゃんか!!」

はい、分かりやすいと言いました。

が、それは「訓練されたヨーダ使いにとって」です。

僕は10年以上前、社会人になって初めて参加したプロジェクト(C++)のコーディング規約でヨーダ記法を採用していました。(当時はヨーダ記法という名前があることも知らなかった)

学生のころ自由気ままにコーディングしていた僕、社会人になって初めてプロジェクト毎にコーディング規約があることを知りました。

コーディング規約の存在理由について「プロジェクト内のコードを一定品質以上に保ち、チーム内で読むのを簡単にするため」と説明され、なるほどぉ〜と感心した記憶があります。

そっからこっちずっとヨーダ記法で過ごした僕はベテランヨーダラーなのです。

なのでプログラムに対して普通の人と感覚が違います。

しかしやはり一般的にはヨーダ記法は読みにくいとの声が圧倒的。

なぜかは分かりません。僕はヨーダ記法が読みにくいという感覚が欠如してしまいました。

マイナー記法のためそもそも使えない

ヨーダ記法はマイナーな記法です。なのでそもそもそういう書き方が許されていないケースが多いです。

厳格度に差はあれど、プロジェクトにはコーディング規約があったりすると思います。

そこで明確に条件式の書き方が決まっていたりしますし、決まっていなくともチームメンバーと異なる書き方をすると色々面倒が起きたりします。

長いものには巻かれろってのはちょっと違うかもしれませんが、プログラムを書くときはその場で主流なやり方にのっとった方が経験上うまくいくことが多いです。

なので必然的に、仕事でヨーダ記法は使えないとなってきます。

さいごに

今回はヨーダ記法とは何なのか?メリットやデメリットは?という内容で紹介しました。

ここまでヨーダ記法についてメリットやデメリットを紹介しましたが、大事なのはプロジェクトの意向です。

プロジェクトのコーディング規約で条件式の書き方が決まっていることもありますし、チームメンバーが理解し難いコードを書くのは出来るだけ避けるべきです。

僕はヨーダ記法の方が条件式を早く理解できるので好きです。なので個人的な開発では積極的に使っていたりします。

流行らない記法だとは思いますが、一度使うと癖になっちゃうかも・・・?

もしかしたら知らず知らずにヨーダ記法を使っている隠れヨーダラーの方もいるかもしれませんね。

ちなみに、プログラマーのバイブル「リーダブルコード」ではヨーダ記法は明確に否定されています(笑)

それでは、最後までお読みいただきありがとうございました。
少しでもお役に立てたらこの記事をシェアしていただけると僕の励みになります。

Webプログラミングの第一歩

プログラミング学習の第一歩に最適なのは、動くものを作ってみることです。

しかしプログラミング未経験の方がテキストを読みながら動くものを作るのは非常に敷居が高いです。

Udemyの講座なら実際に講師の方が動画で説明してくれるため、イメージが掴みやすくとっつきやすいです。

おすすめの講座を知りたい方はこちらの記事をご覧ください。

おすすめUdemy講座7選を見てみる

RELATED POST
プログラミング初心者向け

【プログラミング初心者向け】チームでプログラミングするときに最低限気を付けたい3つのこと

2018年4月4日
Tanakano*
一つのプロジェクトとして複数人でプログラミングをするときに、 最低限気を付けなければいけないことがあります。 それは以下の3つ。  …