「リーダブルコード」の読書メモ

「リーダブルコード」の読書メモです。1年ほど前に読んでその際にブログの下書きも書いていたので、投稿します。

この本を読んだ理由

Python でコードを書いていると同じ処理でも書き方が複数あり、「どれが読みやすいか」と迷うことがありました。その際の判断軸を得たいと思ったため、本書「リーダブルコード(The Art of Readable Code)」を読みました。

なお、原著を読んでおり、以下に記載のページ数は原著でのページ数を表しています。

学んだ事・思った事

全体の大まかな感想を述べると、まずパート3までの内容は基本的に自分が既に他の人のコードを見て学んできたことと同じ、という印象を受けました。ただ、自分がこれまで得てきた知識が本書によって裏付けされた、ということに価値があったと思います。

一方でパート4については、学びの多い非常に素晴らしい内容だと感じました。まず Chapter Fourteen についてはテストに対する考え方とその実行方法を知ることができ、Chapter Fifteen については実践的な例からコーディングをする際に気を付けるべきことを具体的に知ることが出来ました。

以下では、本書で学んだ事・思った事の詳細を記載します。

Chapter One

  • p.3: コードの可読性において最も重要なのはコードを読む人が理解するまでに掛かる時間を減らすこと。

Chapter Two

  • p.8: 関数の命名GetPage とした場合、その get が具体的にどのような処理を意味しているかが分からないため、fetchdownload などのより明確な名前を用いるべき。
  • p.18: 変数名の長さは、スコープの大きさで決めるのが良い。小さなスコープでしか使わない変数の場合は短い変数名で良く、逆に大きなスコープで使う場合は明確に分かる変数名を付けるのが良い。

Chapter Three

  • p.25: 数量などの限度を表したい場合は minmax を使うのが良い。これによって inclusive な限度であることが明確に伝わる。
  • p.26: 両端を含んだ範囲を表したい場合は firstlast を使うのが良い。 startstop を使うと、 stop の値が含まれるのかが分かりづらい。
  • p.26: beginend は、始点が含まれ、一方で終点は含まれない範囲を一般的には表す。
  • p.28: getMean という名前の関数があった場合、これはこの関数内で平均を計算する処理をしているのか(計算量が多いのか)、それとも既に計算されている値を取得するだけなのか(計算量が少ないのか)が分かりづらい。そのため、前者だった場合は computeMean といった名前にすることで処理の内容がより明確に伝わるようになる。

Chapter Ten

  • p.116: get_cookie のように何をしているかが明確な場合には get を用いて良い。

Chapter Twelve

  • p.134: 自分が書くコードの処理を分かりやすくするには、まず「簡単な言葉で」その処理を表現し、その表現をコードで表していく、というプロセスを踏むのが良い。このプロセスを再帰的に繰り返していくことによってコード全体が読みやすいものとなる。

Chapter Thirteen

  • p.140: コードというのは、必ずしも処理が早いものを求められている訳ではない。同様に、全てにおいて正しい必要もなく、全ての入力を処理できるようにする必要もない。重要なのは、与えられている要件を詳しく調査してよりシンプルな問題を解くようにすること、その結果としてよりシンプルなコードを作り上げること。

Chapter Fourteen

  • p.152: コードのテストというのは多くの場合、「このインプット/状況の時に、この振る舞い/アウトプットが得られるか」を確認する。そのため、テストを書く時にはこの「インプット/状況」と「振る舞い/アウトプット」を引数として取れるようにする必要がある。
  • p.162: テストカバレッジを100%にすることに拘る必要はない。バグによる影響がどれくらいかによって、テストコードに費やす時間を決めるのが良い。