-
無駄な変数が多い
- 説明にならない邪魔な変数は削除する
-
変数のスコープが大きい
- 変数を数行のコードからのみ見える位置に移動する
-
変数の値が頻繁に変更される
- 「永久に変更されない」変数を使う
-
役に立たない説明変数・一時変数
now = datetime.now(); created_at = now
- 変数
now
がなくても十分理解できるので、複数の場所で使わないのなら不要- 逆に、残しておくと読み手は「この変数またどこかで使うかも?」と勘ぐってしまう
- 不要な一時変数はコードを変更しているうちに発生してしまうことが多い
-
制御フロー変数
done = False while not done: ... if ...: done = True continue
- 変数
done
を使わなくても、終了条件を満たした時点でbreakすれば変数を削除できる - ネストしている場合は関数として切り出す
def func(...): while True: ... while True: ... if ...: return result
- 変数
変数のことが見えるコード行数をできるだけ減らす。
-
関数・メソッドを細かく分割する
-
C, C++など
- 条件式の中で宣言してスコープを狭める
if (PaymentInfo* info = database.ReadPaymentInfo()){..}
-
Javascript, Pythonなど
- クロージャを使ってスコープを狭める
変数を操作する場所が増えると、現在値の判断が難しくなる。
const
,final
などの定数リテラルがあれば使う- 定数は全部大文字で書くといった命名規約を採用する(pep8等)
考えなければならないことを減らせる様に書く
「生きている」変数の数が多ければ、読む人はその全てを頭の片隅に置いておく必要がある。その時々に意識する必要のある変数の数をなるべく減らすことが読みやすさにつながる。
- 反省が多い章だった
- 取り敢えず説明変数作っておけば良いと思っている節がある
- この章を読んで関数型言語の副作用の無さという良さを再認識した
- また、モジュール結合度の強いOOPで発生した「理解不能なバグ」の数々を思い出した