iriya-ufo's blog

Curiosity was simply the first derivative of knowledge.

「良いコードを書く技術」読了

良いプログラマであるならば良いコードに対する知見があるはずです。初心者の間は何が良いコードで何が悪いコードなのか分からないことが多く、また分かったとしてもどうやって良いコードにリファクタリングするのか不明瞭な所が多いです。本書では具体事例を上げて良いコードとは何かについて語られています。

まず良いコードについての定義から入ります。

  • 保守性が高い
  • 効率的に動作する
  • 正確に動作する
  • 無駄な部分がない

これら条件を達成するために、変数名の付け方から始まり抽象化やメタプログラミングまで幅広く扱っています。

以下各章の内容をざっくりとまとめてみました。

名前付け

変数名、メソッド名、クラス名、様々な場面において名前をつける過程が発生します。よくあるコーディング規約に乗りつつ、長すぎない、短すぎない、処理の意図を反映した名前などをつけることが大事だと言われています。

スコープ

スコープを意識して影響範囲を小さくするようにします。言語によって仕様が異なるし、変数なのかメソッドなのかクラスなのかによってもスコープ範囲は変化するので日頃から意識してコードを書く必要があります。

コードの分割

コードの一部を分けるということはよくある作業ですが、単純にコードが長いから分けるのではなく可読性などを考えた上で分けることが大事です。コード分割をする際の考え方として大きく2つあると書かれています。一つはボトムアップ形式でもう一つはトップダウン形式です。 ボトムアップ形式ではまずベタに書いてみてその後に分割できそうな箇所を洗い出すというやり方で、トップダウンは予め想定される必要なメソッドやクラスなどを分割してその後実装に入るというやり方です。どちらも一長一短があるので両方取り入れて開発するのがいいと思います。

コードの集約

先ほどはコードの分割でしたが今度はコードを集める、です。同じような処理があるコードは集約しようという考えです。メソッドでまとめる、継承でまとめる、オブジェクトでまとめる、定数でまとめる、などの方法があります。

コードのパフォーマンス

若干高度な内容だと思いました。計算量を意識してコードを読む、クラスの選択によるパフォーマンスの変化、ライブラリの使い方による変化、などなど。パフォーマンスに関してはこれだけで本一冊書けそうなくらい奥の深い分野ですね。

ユニットテスト

テストは大事だよね、っていう話しです。割愛。

抽象化

コードの集約と通ずるところがありますが、単にまとめるという意味に留まらず、突然の変更にも柔軟に対応できるような設計をすることが抽象化において大事なことだと思います。本書では「画像ファイルの一覧を表示するWebアプリケーション」というお題で実際にベタなコードから始まり抽象化をしていくコードが載ってあります。

メタプログラミング

コードを自動生成するコードなどではメタプログラミングが必須です。本書では「ExcelによるDSL」で具体的なコードがあります。

フレームワークを作ろう

割愛

つまり、良いコードとは何か?

普段意識して読んだり書いたりしている人は自ずと良いコードになっていきますが、よく考えずにただコーディングしているだけではなかなか良いコードは書けないと思います。本書を読むとどう思考してどこに注意すれば良いコードが書けるのかの手助けになります。ぜひ読んでみるといいでしょう。