前提
クラス
クラスはオブジェクトであり、概念。
メソッド
メソッドはクラス(オブジェクト)の振る舞い。
インスタンス変数
インスタンス変数はクラスの属性、性質、状態を表すもの。
良い命名とは
基本的には「クラス名+メソッド名」と並べた際に英語として適切であれば良い命名
だといえる。
つまり基本はクラスが主語、メソッドが述語の関係。
もしくはクラスを操作対象のオブジェクトとみなした際の、命令形にしたときの対象となる。
例えば「モンスター」クラスに「攻撃する」というメソッドがあれば
class Monster
def attack
end
end
monster = Monster.new
monster.attack
# モンスターは攻撃する
# モンスターよ、攻撃しろ!
のように命名すると良い。
命名を考える際に気をつけること
関係性を理解し言葉にできるか
あるオブジェクトの振る舞いがメソッドで、その構成要素/属性/性質がインスタンス変数。この関係性をまずは理解する。
そして対象のモノ(物事、概念、その他オブジェクト)がどんな物なのかを的確にイメージし、それを言葉にする。
そしてそれは「誰がみてもそう」という妥当性が重要となる。
つまりクラス名を見たときに、このクラスの内容を想像することができるか
を常に想像すること。
この際、Informationやdataなどの抽象度の高い命名はできるだけ避けるようにする。
オブジェクト↔メソッドを互いに想像できるか
「名前(クラス、オブジェクト)からその内容(メソッド、インスタンス変数)を想像できること」「内容からその名前を想像できること」どちらも考える必要がある。
するとメソッドやインスタンス変数が適切であるかもそこから見えてくる。
よって良い変数名、メソッド名、クラス名というのは名前がその中身を正しく表している
といえる。
そしてその内容こそがそのクラス(オブジェクト)の責務と呼ばれるものになりうる。