2009年4月22日水曜日

クラスメソッドとインスタンスメソッド

バッチでモデルのコントローラをたたくという処理を行うにあたってクラスメソッドとインスタンスメソッドの違いについて聞いたのでメモ。

インスタンスメソッドとは、特定のインスタンスに対するメソッドで、インスタンスを指定してやらないと実行できない。
一方、クラスメソッドとは、特定のインスタンスを必要とせず、クラスそのものに直結しているメソッド。

クラスとはある概念、たとえば人間というものを表すものなので、人という概念に対する機能がクラスメソッド。
インスタンスとはある実体、たとえばAさんという人を表すものなので特定の人が実行する機能がインスタンスメソッド。

ということか?

Rubyにおいてはクラスメソッドは「self.」をつけるか「self」で囲むかで指定。

たとえばHumanクラスというものがあった時に以下のような使い分け。

class Human

 # クラスメソッド 書き方1
 def self.get_popularity
  # 略
 end

 # クラスメソッド 書き方2
 class << self
  def get_japanese
   # 略
  end
 end

 # インスタンスメソッド
 def go_school
  # 略
 end
end

# クラスメソッドを使ってみる
Human.get_popurarity # クラス.クラスメソッド
Human.get_japanese

# インスタンスメソッド使ってみる
masa = Human.new # まずはインスタンス生成
masa.go_school # 続いてインスタンス.インスタンスメソッド

こんなイメージですかね?
ちなみにnew関数はHumanクラスで実行させてるのにクラスメソッドではないらしい。。

0 件のコメント: