Rubyのクラスメソッドを自作する

class << ClassNameでクラス自身をレシーバとしたクラスメソッドを作成することができる。
例はクラス定義の中でクラスメソッドを追加している。クラスメソッドがselfで呼ぶものは同様のクラスメソッドとなる。

class Message
class << self
def hello_puts(name)
puts self.hello_message(name)
end
def hello_message(name)
"Hello #{name}"
end
end
end
Message.hello_puts("Jane")
# Hello Jane

def ClassName.methodとしてクラスメソッドを定義することもできる。例は先の例と同様の機能を持つクラスメソッドである。

class Message
def self.hello_puts(name)
puts self.hello_message(name)
end
def self.hello_message(name)
"Hello #{name}"
end
end
Message.hello_puts("Jane")
# Hello Jane

このインスタンスメソッドとクラスメソッドの実用例としてRuby on Railsがある。
Ruby on Railsのモデルでは、インスタンスメソッドはテーブルのレコードのデータを参照する事ができ、クラスメソッドはModel.findModel.whereでデータ全体にアクセスする事ができる。
したがって、レコードに登録されたユーザー名を出力時に加工したい時、ビューに直接処理を書かずにモデル内に処理を内包したい時はインスタンスメソッドで定義する。また、最近更新されたレコードを取り出すといった処理をコントローラーに毎度記述せずにモデル内に内包したい時はクラスメソッドとして定義する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA