はじめに
リーダブルコード(オライリー)では、「読みやすさの基本定理」を下記のように定義している。
コードは他の人が最短時間で理解できるように書かなければいけない。
ここで、「他の人」とは、何週間後の自分自身も含む。また、「理解できる」とは、バグに気づき、コードの修正を行い、他のコードとの連携を設計することができることを指す。
本記事では特に、「カードの再構成」によるリーダブルコード達成方法を取りまとめる。
(前々回記事:第Ⅰ部 表面上の改善)
(前回記事 :第Ⅱ部 ループとロジックの単純化)
コードの再構成
これまで、第Ⅰ部で「コードの表面的な改善」、第Ⅱ部で「小さな塊としてのコードの改善」について学んできた。第Ⅲ部では視点をマクロに変えて、巨大なコードブロックを再構成して解きたい問題を関数レベルに分解する方法について学ぶ。
以下の4項目について学ぶことで、理解しやすいコードを作成するテクニックが身につく。
- コードのデフラグによるタスク整理
- コードは短くする
- 明確なロジックでストーリーを建てる
- コードを独立させる
コードのデフラグによるタスク整理
本項目の目標は、「一つの段落で一つのタスクを行えるように、コードのデフラグを行えるようになること」である。
デフラグとは
デフラグ(デフラグメンテーション)とは、バラバラになったデータの断面を整理して効率よく並び替えること(詳細はIT用語辞典へ→こちら)
コードがデフラグされているメリットは下記の通りである。
コードをデフラグするメリット
- 【簡潔化】重複削除により、コードがシンプルになる
- 【疎結合化】タスク同士が疎結合になることで、ある領域を読むときは他の領域のことを考えなくて済む
- 【修正容易化】ある機能に修正の必要が生じた際、1段落にまとまっていることで効率的に書き換えることができる
適切にコードのデフラグを行うために、下記の手順を踏むとよい。
- コードが行っているすべてのタスクを列挙する(下記画像の「コード内容」を洗い出す)
- タスクをできるだけ異なる関数、または段落に分割する(同じ「コード内容」は1段落にまとめる)
コードは短くする
コードはなるべく短くするべきである。
コードを短くするメリット
- テストや保守が容易になり、時間節約になる
- 管理や引き継ぎが楽になる
コードを短くするために下記を意識すると良い。
意識すべきこと | 詳細 |
---|---|
要求の削除・無用の機能の削除 | 本当にその機能は必要なのか?と自問自答する |
より単純な問題の解決 | もっと簡単なロジックで書けないか?視点を変えたりして考え直す |
util関数による重複コードの削除 | よく使う関数をモジュールとしてまとめておくことで余計なコピペを省ける |
サブ単位に分割 | 答える問(実装したい仕組み)を細かく分割できないか考える |
ライブラリ・組み込みモジュールの活用 | Pythonなら便利なライブラリが山ほどある。ライブラリが提供しているものをしっかり理解しておく |
コマンドラインの活用 | Pythonで頑張って実装するよりも「!」でコマンドライン書いたほうが楽なことも |
明確なロジックでストーリーを建てる
明確なロジックで建てられたコードは、作成者が何をしたいのか容易に理解できる。
そのようなコードを作成するために、下記の手順を踏んでからコード作成に臨むと良い。
- 作成したいコードの動作(ロジック)を簡単な言葉で説明する
- 説明内のキーワードやフレーズをピックアップしておく
- その説明に合わせてコードを書く
1.ができないとき…
ロジックの詳細が明確になっていない可能性が高いため、改めて何をしたいのか考え直す必要あり
コードを独立させる
プロジェクトでいくつもコードを作成していく中で、「汎用的なコード」は「プロジェクト固有のコード」から積極的に分離していくべきである。
汎用的なコードを独立させるメリット
- 再利用が可能であるため、コードを各時間が短縮される
- 改善が楽であるため、機能追加や可読性向上が容易にできる
汎用的なコードを独適切に独立させるために…
- キレイなインタフェースを心がける(スムーズに活用できるようにするため)
- 引数が少ない
- 事前設定が必要ない
- 作りすぎない(逆に理解の妨げになることもあるため)
終わりに
本記事では、これまでよりもマクロな視点で読みやすいコードとは何か説明した。コーディング以外でも通ずる点がいくつかあり、本筋としては一般的な文章構成と同等の考え方で良いような気がしている。
ESを書くのが得意だった人は、特に意識しなくても本記事の内容はできてそうだなと思ったり思わなかったり…