Ch.7~8(制御フローを読みやすくする&巨大な式を分割する)|『リーダブルコード』読解メモ #4

f:id:lib-arts:20191013194556p:plain

コーディングにあたっての指針を示しておければということで、『リーダブルコード』を課題本に設定しまとめています。(基本的に本を片手にご確認いただく前提なので、細かいところの記述は省略すると思います。勝手に解釈した上での要約なので、万が一解釈違いは生じていたとしたらご容赦ください。)

O'Reilly Japan - リーダブルコード

#1ではCh.1の『理解しやすいコード』とCh.2の『名前に情報を詰め込む』について、#2ではCh.3の『誤解されない名前』とCh.4の『美しさ』について、#3ではCh.5の『コメントすべきことを知る』とCh.6の『コメントは正確で簡潔に』についてまとめました。

Ch.1~2(理解しやすいコード&名前に情報を詰め込む)|『リーダブルコード』読解メモ #1 - lib-arts’s diary

Ch.3~4(誤解されない名前&美しさ)|『リーダブルコード』読解メモ #2 - lib-arts’s diary

Ch.5~6(コメントすべきことを知る&コメントは正確で簡潔に)|『リーダブルコード』読解メモ #3 - lib-arts’s diary

#4では引き続いて、Ch.7の『制御フローを読みやすくする』とCh.8の『巨大な式を分割する』についてまとめていきます。
以下目次になります。
1. Ch.7_制御フローを読みやすくする
2. Ch.8_巨大な式を分割する
3. まとめ

 

1. Ch.7_制御フローを読みやすくする(簡単な要約)
条件やループなどの制御フローがないコードは他の場所に飛んだり枝分かれしたりしていないので読みやすい。Ch.7ではコードの制御フローを読みやすくするにあたってまとめる。この際に重要な点としては、「条件やループなどの制御フローはできるだけ『自然』にし、コードの読み手が立ち止まったり読み返したりしないように書く」ということである。
以下、「自然」な記述を行うにあたっての観点についてまとめる。

・条件式の式の並び順
-> 条件式の引数の並び順は、左側を変化する「調査対象」の式、右側を定数のように基本的に変化しない「比較対象」の式を入れると読みやすくなる。

・if/elseブロックの並び順
-> if/elseを使う際にはいくつかの基準を意識しておくと良い。(1)条件は基本的には否定形よりも肯定形を用いるようにする、(2)単純な条件を先に書く、(3)関心を引く条件や目立つ条件を先に書く。これらを意識しておくと読みやすいコードを書くことができるが、状況によって判断基準は変わってくることも頭に入れておくと良い。

三項演算子
-> 基本的にはif/elseを用いるようにし、三項演算子はそれによって簡潔になる時だけ使うべきである。

・do/whileループを避ける
-> do-statementはエラーや混乱の原因になることが多いので避ける方が良い。

・関数から早く返す
-> 複数のreturn文を使ってはいけないと思われがちだが、関数から早く返すことは良いことでむしろ望ましいときもある。たとえば入力値のvalidationのような処理は先に「ガード節」として実装してしまうのが良い。

・悪名高きgoto
-> C言語以外ではgotoはほとんど必要ない。gotoを使うとすぐに手に負えなくなったり、コードについていくのが難しくなったりするので非常に評判が悪い。基本的にはgotoは使わないと考えておくと良い。

・ネストを浅くする
-> ネストが深いコードは理解しにくいので極力避けた方が良い。改善にあたっては、「失敗ケース」をできるだけ早めに関数から返したり、continueを用いるなどしてループ内のネストを削除したりする方法がある。

 

2. Ch.8_巨大な式を分割する(簡単な要約)
人間は一度に3~4ほどの「もの」しか考えられないので、コードの式が大きくなればそれだけ理解が難しくなる。そのため、「巨大な式は理解しやすい大きさに分割する」というのを意識しておくと良い。
以下にコードを理解しやすくするための処理や分割の方法をまとめる。

・説明変数
-> 式を簡単に分割するには式を表す変数を使えば良い。この変数を「説明変数」と呼ぶこともある。

・要約変数
-> request.user.idのようにいくつかの概念をまとめて取り扱うと大変なので、要約変数を用いてこういった概念を明確に表現すると良い。

・巨大な文を分割する
-> 同じ式がいくつかある際はそれらを要約変数として関数の最上部に抽出すればよい(これはDRY原則の実例でもある)。こうすることで、タイプミスを減らしたり、コードが読みやすくなったりのメリットがある。


3. まとめ
#4ではCh.7の『制御フローを読みやすくする』とCh.8の『巨大な式を分割する』について取り扱いました。どちらも意識しておくと、コードをシンプルで読みやすくするのに役立ちそうな内容で参考になるものだったかと思います。
#5ではCh.9の『変数と読みやすさ』とCh.10の『無関係の下位問題を抽出する』についてまとめていきます。