『リーダブルコード』第13章 短いコードを書く

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

鍵となる考え:最も読みやすいコードは、何も書かれていないコードだ。

その機能の実装について悩まないで ̶̶きっと必要ないから

いわゆるYAGNI(You ain’t gonna need it)

プログラマというのは、実装にかかる労力を過小評価するものでもある。

質問と要求の分割

すべてのプログラムが、高速で、100%正しくて、あらゆる入力をうまく処理する必要はない。要求を詳しく調べれば、問題をもっと簡単にできることもある。

コードを小さく保つ

  • 汎用的な「ユーティリティ」コードを作って、重複コードを削除する
  • 未使用のコードや無用の機能を削除する
  • プロジェクトをサブプロジェクトに分割する
  • コードの「重量」を意識する

身近なライブラリに親しむ

たまには標準ライブラリのすべての関数・モジュール・ 型の名前を 15 分かけて読んでみよう。

まとめ

  • 不必要な機能をプロダクトから削除する。過剰な機能は持たせない。
  • 最も簡単に問題を解決できるような要求を考える。
  • 定期的にすべての API を読んで、標準ライブラリに慣れ親しんでおく。

『リーダブルコード』第12章 コードに思いを込める

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

1. コードの動作を簡単な言葉で同僚にもわかるように説明する。
2. その説明のなかで使っているキーワードやフレーズに注目する。
3. その説明に合わせてコードを書く。

ロジックを明確に説明する

「空っぽのif文を作る」というアイデアが面白い。

ライブラリを知る

簡潔なコードを書くのに欠かせないのは、ライブラリが何を提供してくれるかを知ることだ。

『リーダブルコード』第11章 一度に1つのことを

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

鍵となる考え:コードは 1 つずつタスクを行うようにしなければいけない。

  1. コードが行っている「タスク」をすべて列挙する。
  2. タスクをできるだけ異なる関数に分割する。

※本章も、前章と同様、本で実例を読んだほうが良い。

『リーダブルコード』第10章 無関係の下位問題を抽出する

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

エンジニアリングとは、大きな問題を小さな問題に分割して、それぞれの解決策を 組み立てることに他ならない。

無関係の下位問題を積極的に見つけて抽出すること

  1. 関数やコードブロックを見て「このコードの高レベルの目標は何か?」と自問する。
  2. コードの各行に対して「高レベルの目標に直接的に効果があるのか? あるいは、無関係の下位問題を解決しているのか?」と自問する。
  3. 無関係の下位問題を解決しているコードが相当量あれば、それらを抽出して 別の関数にする。

まとめると、プロジェクト固有のコードから汎用コードを分離すること。

※この章は、実際のコード例が多数出てくるので、要約よりも本の現物を読んだほうが良い。

『リーダブルコード』 第9章 変数と読みやすさ

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

変数を削除する

役に立たない一時変数

  • 複雑な式を分割していない
  • より明確になっていない
  • 重複コードの削除になっていない

中間結果を削除する

配列から値を削除するJavaScript関数の例:

index_to_removeという変数は中間結果を保持するためにだけ使っている。index_to_removeを削除すると、以下のようにすっきりさせることができる。

制御フロー変数を削除する

以下の例のdoneのような変数は、プログラムの実行を制御するためだけの変数(制御フロー変数)であり、実際のプログラムに関係のあるデータは含まれていない。うまくプログラムすれば、制御フロー変数は削除することができる。

変数のスコープを縮める

鍵となる考え:変数のことが見えるコード行数をできるだけ減らす。

スコープを縮めるための具体的な実装は、言語により異なる。JavaSctiptなら『JavaScript: The Good Parts』や『JavaScriptパターン』が参考になる。PHPでWebアプリを作るなら、MVCフレームワークを使い、ファットコントローラーを避け、メソッドを細かく分割するようにすれば個々の変数のスコープは小さくなる。

変数は一度だけ書き込む

鍵となる考え:変数を操作する場所が増えると、現在値の判断が難しくなる。

変数の値は一度設定したら書き換えないようにする。言語が定数やイミュータブルな値をサポートしている場合は、必要に応じてこれらを使用する。