Ch.11~12(一度に1つのことを&コードに思いを込める)|『リーダブルコード』読解メモ #6
コーディングにあたっての指針を示しておければということで、『リーダブルコード』を課題本に設定しまとめています。(基本的に本を片手にご確認いただく前提なので、細かいところの記述は省略すると思います。勝手に解釈した上での要約なので、万が一解釈違いは生じていたとしたらご容赦ください。)
#1ではCh.1の『理解しやすいコード』とCh.2の『名前に情報を詰め込む』について、#2ではCh.3の『誤解されない名前』とCh.4の『美しさ』について、#3ではCh.5の『コメントすべきことを知る』とCh.6の『コメントは正確で簡潔に』について、#4ではCh.7の『制御フローを読みやすくする』とCh.8の『巨大な式を分割する』について、#5ではCh.9の『変数と読みやすさ』とCh.10の『無関係の下位問題を抽出する』についてまとめました。
Ch.1~2(理解しやすいコード&名前に情報を詰め込む)|『リーダブルコード』読解メモ #1 - lib-arts’s diary
Ch.3~4(誤解されない名前&美しさ)|『リーダブルコード』読解メモ #2 - lib-arts’s diary
Ch.5~6(コメントすべきことを知る&コメントは正確で簡潔に)|『リーダブルコード』読解メモ #3 - lib-arts’s diary
Ch.7~8(制御フローを読みやすくする&巨大な式を分割する)|『リーダブルコード』読解メモ #4 - lib-arts’s diary
Ch.9~10(変数と読みやすさ&無関係の下位問題を抽出する)|『リーダブルコード』読解メモ #5 - lib-arts’s diary
#6では引き続いて、Ch.11の『一度に1つのことを』とCh.12の『コードに思いを込める』についてまとめていきます。
以下目次になります。
1. Ch.11_一度に1つのことを
2. Ch.12_コードに思いを込める
3. まとめ
1. Ch.11_一度に1つのことを(簡単な要約)
一度に複数のことをするコードは理解しにくい。オブジェクトを生成して、データを綺麗にして、入力をパースして、ビジネスロジックを適用しているような絡み合っているようなコードは、「タスク」が個別に完結しているコードよりも理解するのが難しい。そのため、コードは1つずつタスクを行うようにするべきである。
「一度に1つのタスクをする」にあたっては下記の手順などを参考にすると良い。
1) コードが行なっている「タスク」を全て列挙する。(ここで「タスク」という言葉はゆるく使っており、「オブジェクトが妥当かどうかを確認する」のように小さなこともあれば、「ツリーの全てのノードをイテレートする」のように曖昧なこともある。
2) タスクをできるだけ異なる関数に分割する。少なくとも異なる領域に分割する。
また、下記では具体的にこれらを実現する方法をまとめる。
1) タスクは小さくできる
-> たとえばUp、Downで表される投票をカウントしていくにあたっては投票を数値に「パース」するのとscoreの更新の二つのタスクを行うが、これらを一緒に記述すると非常に複雑になるため、それぞれのタスクを分けて実装するとシンプルかつ間違いが少ない形で実装ができる。2) オブジェクトから値を抽出する
-> 基本的にオブジェクトからの値の抽出にあたってはまず値を抽出した上で処理を行っていくと良い。
読みにくいコードがあれば、基本的にはタスクを列挙した上でコードの分割を行っていくと良い。この際に、プログラムが行っていることを正確に把握しようと意識するというのが重要である。
2. Ch.12_コードに思いを込める(簡単な要約)
誰かに複雑な考えを伝えるときには、細かいことまで話しすぎると相手を混乱させてしまう。そのため、自分よりも知識が少ない人が理解できるような「簡単な言葉」で説明する能力が大切である。自分の考えを凝縮して最も大切な概念にすることが重要で、これは誰かに理解してもらうだけではなく自分の考えをより明確にすることにも役立つ。
コードを読み手に渡す際にもこれと同様の能力を使うべきである。ソースコードというのは、プログラムの動作を説明する最も大切な手段なので、コードも「簡単な言葉で」書くべきである。
コードをより明確にするにあたっては、下記のような簡単な手段を使うと良い。
1) コードの動作を簡単な言葉で説明する
2) 説明の中で使っているキーワードやフレーズに注目する
3) その説明に合わせてコードを書く
以下、各サブセクションの内容をまとめていく。
12-1. ロジックを明確に説明する
-> コードにはロジックがたくさんあることが多いが、なるべくシンプルに明確に言葉でロジックを説明しようと試みると良い。12-2. ライブラリを知る
-> 簡潔なコードを書くにあたっては、ライブラリが何を提供してくれているのかを知ることが欠かせない。12-3. この手法を大きな問題に適用する
-> 解決策を言葉で説明し、手法を再帰的に適用していくと良い。
コードを言葉で説明するというのは思っているよりも簡単だが、非常に強力である。説明でよく用いている単語やフレーズを見れば、分割する下位問題がどこにあるかがわかる。問題や設計をうまく言葉で説明できないのであれば、何かを見落としているか詳細が明確になっていないということなので注意が必要である。プログラムを言葉にすることで明確な形になる。
3. まとめ
#6ではCh.11の『一度に1つのことを』とCh.12の『コードに思いを込める』について取り扱いました。コードを言葉で表すという手法はなかなか強力な手法のように思われました。
#7ではCh.13〜Ch.15についてまとめていきます。