2020-09-26

if文のネストを浅くするために逆条件を書くの、本当に読みやすいの?

プログラミングしてて、ある条件のときだけ処理をしてそれ以外は初期値を返す様な関数を作るとき、俺はif文で関数の中身全体を括ってしまう。その方がどんな条件のときに処理をするのかが分かり易いから。

しかしこれがレビューで指摘を受ける。

これだったら処理をしない条件をifに書いてその中で初期値を返し、それ以外のところはネストを浅くした方が読みやすい、と言うのがレビュアーの主張だ。

まぁ俺はペーペーだしレビュアーの指摘なので、ド・モルガンの法則を使って処理をしない条件を書くのだけれど、使ってる言語PHPなこともあっていまいち!の効力を信じきれないし、処理をしない条件を書かれるより処理をする条件を書いた方が読みやすいと思うんだよな。

ネストが浅い方が読みやすいってのは、ループ文のネストだったらまだわかるんだけど(ループ文のネストは処理時間的にも避けた方がいいし)if文でそれを言われるの(3重くらいになってたら言われるのも仕方ないが)あまり納得がいかない。

しかもそのために処理をする条件の逆条件を書くの、スッゲー分かりにくくない?

  • ガード節のテクニックを理由をつけて教えてくれるなんて良いレビュアーだな。小さな関数であっても、仕様が追加されて大きな関数になってしまうのはよくあることだから、関数の中...

    • なるほどなぁ。読みやすいって理由よりはそっちの方がよっぽど納得できる理由だ。 でかい関数作るの馬鹿じゃね?とは思うが、大規模プロダクトを長年触っているとそうなってしまう...

  • ガード節だね レビュアーの方の言う通り、関数の初期段階で判定して return するのが一般的だよ。自分もそのほうが「読みやすい」 いろんなソースに頻出するから、なれておかないと他...

  • if分岐のネストが深いことが意味する本質は可読性を落とすことではなくて循環的複雑度が爆上がりしてテストが難しくなるってことだよ 副次的に読み辛くもなる

  • 早期returnは、ほとんどの状況で絶対正義と言っていいと思う。   ifブロックの悪いところは、それがチャンクを1つ消費するところである。 ifブロックの中を読むとき、それが終わったあ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん