early return について考える

「early return」という用語をご存じだろうか。日本語では「早期リターン」とも呼ばれる。

これは、if文のネストを減らすために、(主に)関数の最初で条件に合致しない場合に処理抜けをする処理を記述するテクニックである。

各所で「early returnしようね」的なことが書かれているけど、機械的にやっているとむしろ可読性がさがることにもなりかねないよね、ということを書いておこうと思う。

なぜ可読性が下がるかというと、先述の「条件に合致しない場合に処理抜けをする」という部分が影響してくる。

人間は否定文を理解することが難しい。例えば「猫を見ないでください」と言われた時、一度「猫を見る」ということを脳内で描いた後、それを否定することを考える。肯定文である「猫を見てください」と比較して脳内の処理に負荷がかかっているのである。

「early return」は、その脳に負荷がかかる否定形を関数の先頭で列挙しがちなのである。関数の先頭で「○○以外は return」、「△△でない場合も return」というような形だ。

もしその書いている関数が短いような場合は、「early return」を使わず、if内に書く場合と比較してみた方がよい。ネストが1,2段増えてたとしても、ifの条件が肯定の形になれば可読性が上がる可能性がある。

もちろん、ネストが多いとスクロールしている時に気になるだろう。「あれ、ここなんかインデントが多いなぁ」という風に。しかし、その凸凹を減らすために脳の負荷を上げる否定形を使ってまで直すべきなのか、機械的に「early return」を適用する前に検討するのが良いと思う。

コメント