上田勲さんの「プリンシプルオブプログラミング」から学んだことを全7記事に分けるシリーズですが、本記事は第二弾の原則編です。
〜前提編〜
〜原則編〜(いまここ)
〜思想編〜
〜視点編〜
〜習慣編〜
〜手法編〜
〜法則編〜
#シンプルであるには、各要素の責務を最小限に抑え、要素同士の関連を単純化する
前回の記事の通り、コードは本質的に修正されうるものであるため、コードをシンプルに保たないと手入れが難しくなります。シンプルとは具体的に何かですが、クラスや関数の責務を最小限に抑えることとそれに対して適切な名前をつけることで分かりやすくすることと、それぞれがどんな従属関係になっているかなどを分かりやすくすることです。
また、要件を満たすために必要最低限なコードだけ書くことがいいとのこと。
#DRYは抽象化により実現する
Don't Repeat YourselfはRubyの原則で何度も出てきたのですが、カッコイイフレーズで好きです。ロジックを各関数にコピーしたり、制御文のブロックをコピーしたり、定数リテラルを直接コードに書くことが例示として挙げられています。コードをコピペしたくなったら足を止めて考えようと思います。
抽象化するには、思い切りというか、部品を組み立てて1つの機能を作る分解のセンスが必要だと思うのですが、そこがなかなか難しい。オブジェクト指向プログラミングやデザインパターンは、重複排除も目的にした手法であり、重複させないようにするためにたくさんの知見が交差してる感じが面白いと感じました。