読者です 読者をやめる 読者になる 読者になる

リーダブルコード:7章 理解しやすい条件式・ループ

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

上記書籍をまとめと自分の考えを記載します。

 

条件式の並び順

次の方針に従います。

左側:調査対象の式。変化する値。

右側:比較対象の式。あまり変化しない値。

良い例

if(length >= 10){ }

悪い例

if(10 <= length){ }

if/elseの並び順

次の点に注意して並び順を決めます。

ただし、次の優劣は衝突することもあるので、そのときは各々判断する必要があります。

  • 条件は否定形よりも肯定形を使う。
    if(!debug) ではなく if(debug) を使いましょう。
  • 単純な条件を先に書く。
    ifとelseが同じ画面に表示されるようになり見やすくなります。 
  • 関心を引く条件や目立つ条件を先に書きましょう。

三項演算子

無理に三項演算子を使わずに、三項演算子を使うことによって簡潔になる場合だけ使いましょう。

簡潔になる例を1つ示しておきます。

time_str += (hour >= 12) ? "pm" : "am"

 do/whileループを避ける。

コードは上から下に読んでいくので、do/whileを使うとコードを2回読むことになってしまいます。

do/whileはwhileに書き直せる事が多いので、whileループを使うようにしましょう。

ネストは浅くする。

ネストが深くなると、読み手はそのネスト内で使われた条件を覚えておく必要があります。

(※本書には『読み手は「精神的スタック」に条件をプッシュしなければなりません。』と記載されています。)

早めに返してネストを削除する。

例えば、失敗ケースをできるだけ早めに関数から返すようにします。

そうすることでネストを浅くすることができます。

if(arguments === void 0){ return null; }
if(arguments === null){ return null; }
if(arguments.length === 0){ return null; }
// 処理

ループ内部のネストを削除する。

「早めに返してネストを削除する」と同じようなことをループ内部で行うには、continueを使います。

短絡評価には注意する。

短絡評価(たんらくひょうか、英: short-circuit evaluation)または最小評価(さいしょうひょうか、英: minimal evaluation)とは、一部のプログラミング言語での論理演算子の意味論を示す用語であり、演算子の第一引数を評価した段階で式全体の値が定まらない場合のみ第二引数を評価する方式を意味する。例えば、ANDの第一引数を評価した結果が false であれば、式全体は必ず false になるし、ORの第一引数が true であれば、式全体は必ず true になるので、第二引数を評価するまでもない。

引用元:Wikipedia 短絡評価

短絡評価は一見、直感的ではないので取り扱いに注意が必要です。

例えば下記コードでargumentsがnullの場合でも正常に動作するのは、第一引数で評価が終了し、第二引数の評価が実行されないからです。

if(arguments === null || arguments.length === 0){ return null; }