省略せずに意図が伝わる名前を設計しているか
player #pとか書いちゃうと自分は分かるかもしないが、他の人は分からない。
damage #dも同様
状況によってはplayerやdamageだけでは分からないので、読み手が理解しやすい配慮をする。
変数を使い回さない、目的ごとの変数を用意しているか
以下のようにdamage
という変数を使い回して、再代入するのはNG
damage = player_attack
damage = damage - something
意味のあるまとまりでメソッド化しているか
以下のような記述が1つのメソッドに混在していると可読性や保守性においてよろしくない。
したがって、意味のあるまとまりでメソッド化することが重要
プレイヤーの攻撃力を合算する
敵の防御力を合算する
ダメージ量を評価する
関係しあうデータとロジックをクラスにまとめているか
いろいろなところにメソッドを書いていると可読性が落ちてしまう。そのため、関連し合うデータやロジックは1つのクラスにまとめること。
また、クラス化するときに重要なのはコンストラクターで初期化するときに不正な値が紛れ込まないように条件でエラーを投げたりする仕掛けを持つこと。
例えば最小値が1の場合、-1などが紛れ込むとバグの原因になる。したがって、以下のような記述を書いておくとよい。
MIN_VALUE = 1.freeze
if value < MIN_VALUE
raise_error('this number is wrong.')
end