新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

オブジェクト指向プログラミングを勉強し初めてから、ずーっと読みたかった本をやっと読み終えることが出来た。
一時は絶版になったりと、もう一生読むことが出来ないんじゃないかと思っていたので、感慨深い。

特に心に残ったところ

パラメータは本来、振る舞いの特性を表す変数の役割を指す。パラメタライズは、そうした変数を取り出して振る舞いを制御する設計を指す。パラメータの受け渡しは、一般に引数と呼ぶインタフェースを通して行うことが多く、パラメータと引数は混合される」

引数とパラメータってあんまり区別していなかった気がする。
凄く勉強になった。

コンパイラが理解できるコードは誰にでも書ける。すぐれたプログラマは、人間にとってわかりやすいコードを書く。

こういう価値観が好きだ。

一時変数はできるだけ取り除く。不必要なパラメータをたくさん受け渡してしまう原因になりがちなので。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)」では、読み易くする工夫として、一時変数の利用を紹介していたように思う。
けどまあ、適切なメソッド名が使われて入れば、そういった一時変数を使うプラクティスも使わずに済む気がするし、減らすようにしていきたいな。

つまり、コードが読みやすく、1ヶ所にのみロジックが書かれ、既存の動作に影響を与えずに変更が可能で、条件分岐が簡潔に表現できていれば、理想的なプログラム

簡潔に優れたプログラムが表現されていて素晴らしい。

あなたの書くコードは、第一に人間のためのものである

いやあ、本当にそう。
書く人にとっても、使う人にとっても。

インターフェースが安定するのは良いことですが、貧弱なインターフェースを凍結することは問題

以前、

メンテし易いシステムが、使いやすいシステム

と聞いたことあって、つまり「作り手が作り易いシステム=改善しやすいシステム」とも言えるってことらしいんだけど、それと同じで、変化させ易い環境を作ることって大事だ。

Rangeパターン

単純に知らなかった。
とても良いアイデアだと思う。

効率をあまり気にする必要なし

とても印象的だった。
もし問題になるようだったら、最適化する段階で実行すれば良いとも。
「最初からパフォーマンスチューニングをするべきではない」ってのは、良く耳にすることだったんだけど、最初に実装する時から効率を気にして一時変数を使っていたところとか、普通に行ってたんで、結構目から鱗だったかな。
これからは直接メソッド呼び出しを使っていっても結構大丈夫なのかなあって思った。
まあ、DBアクセスが発生するところとかはアレなんだけど。

全体的な感想

いやーとても読み易かった。
有名な本なので、どんだけ難しいのだろうって思っていたけど、意外と楽しく読むことが出来た。
あと、結構知っていることも多かった気がする。
それはどれだけ他の本が、この本に書かれていることをリスペクトしているかの証になっていると思う。

読み終えるまでは、なんでこの本がオブジェクト指向プログラミングをする上で、とても重要な本に位置づけられているのか疑問だったけど、リファクタリングって簡単にいえば、プログラミングコードを改善する手法なので、良いコードを知っていなければ出来ないんだよね。
なので、この本には「どういったコードが良いコードなのか」ということが、やんわりと書かれている。
それがサンプルコードと共に丁寧にビフォア&アフターが書かれているところが、とても分かり易いんだよね。
意外と、プログラミングを始めて最初のころに読んでも良い類の本なのかもしれない。

基本的にはカタログ本なので、手元においてちょこちょこ読み返したい本の一つになりそう。
これで胸をはって「リファクタリング」って言葉が使えそうかな。
さすがでした。