railsを勉強中にselfというのが出てきて、
どうにも理解できず改めて勉強してみたのでまとめる。
#selfの定義の仕方
selfをつけるとクラスメソッドが定義できます。
class User
#クラスメソッド
def self.classHoge
end
#インスタンスメソッド
def instanceHoge
end
end
このような形でselfを頭に着けると定義できる。
class User
class << self
#クラスメソッド
def classHoge
end
end
#インスタンスメソッド
def instanceHoge
end
end
こんな書き方もOK。
#selfの使い方
#クラスメソッド
User.classHoge
#インスタンスメソッド
User.new.instanceHoge
newしなくて使えるのがクラスメソッド
#結局何が違うの?
ここから先は、まだ検証できたわけではないですが、
こんなことなのかな?と思っていることです。
誤りあればご指摘ください。。。
クラスメソッドは例えばUserクラス全体からなんらかの条件に合致するUserを取得する時に使うと良い。
インスタンスメソッドは任意のUserオブジェクトからさらになんらかの条件に合致するUserを取得する時に使うと良い。
こんな使い方できるかな?と思っていること。
クラスメソッドでUserクラス全体から任意のUserを取得する。
(例えば、25歳以下のUserを取得するとか。)
そこからなんらかの処理を施した後、取得したUserオブジェクトの内、
男性のみを取得したいなどがあれば、selfを組み合わせてうまいことメソッドが組めるのでは?
#イメージ
class User < ActiveRecord::Base
def self.getYoungUser
#25歳以下のユーザを取得する処理
end
def getMaleUser
#インスタンスから男性ユーザのみを取得する処理
result = Array.new
if self.sex="male"
result.push(self)
end
end
end
userIns=User.getYoungUser
p userIns.getMaleUser
このような形で一回取得したオブジェクトに対してさらに処理を加えたいときに使えるのかなと。
//検証後に結果を反映します。
//ご指摘ありましたらいただけると幸いです。。。