リーダブルコードを意識しながら普段気をつけていること(1)

初のシリーズもの。不定期開催します。
普段コードを書く時にリーダブルなコードを書く時に気をつけていることです。
思いついたら書いていきます。

第1回目は

コンテキストを作る

例えばcsvアップロード機能・ダウンロード機能を作ったときに以下のようなメソッドがあるとします。

1
2
3
4
5
6
7
8
9
10
11
12
class Hoge
  def download
    header
  end

  def upload
  end

  private
  def header
  end
end

ここでのheaderメソッドはcsvダウンロード時にヘッダを作るメソッドとします。

初めてソースを見た人はheaderメソッドを見ただけではそれがアップロードに使われるのかダウンロードに使われるのかわかりません。
downloadメソッドもしくはuploadメソッドを読んではじめてどちらで使えるかわかるようになるかと思います。

これを両方のメソッドを読まずにheaderメソッドがどこで必要とされているかを一発でわかるようにしたいと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Hoge
  module Download
    def download
      header
    end

    def header
    end
  end

  module Upload
    def upload
    end
  end

  include Download
  include Upload
end

機能毎(あるいは関心ごと)にメソッドをmoduleを使って閉じ込めることで、
headerメソッドがどこで必要となるか一発でわかるようになりました。

またdownloadに不具合があった場合にはDownloadモジュールだけを読めばいいようになったため、読まなければいけないソースは格段に減ってコードリーディングする人の負担もだいぶ軽くなったのではないでしょうか?

今回は簡単な例ということでclassの中にmoduleを書いてしまいましたが、
moduleの処理が大きくなる場合にはもちろんファイル分割 & 適切にクラス分割して記述するべきだと思います。

Comments