クラス

//ruby/1 Rubyクラス定義の一例↓

class Order < ActiveRecord::Base
  has_many :line_items
  def self.find_all_unpaid
    find(:all, 'paid = 0')
  end
  def total
    sum = 0
    line_items.each {|li| sum += li.total}
  end
end

クラス内メソッドの先頭にself.をつけると、クラスメソッドとなる。(staticと同様)

通常の形式でメソッドを定義すると、インスタンスメソッドとなる。(dynamicと同様)

呼び方は下記

puts "合計は #{order.total}"

インスタンス変数は、クラス内全てのインスタンスメソッドで使用できる。各オブジェクトが持つインスタンス変数のセットは、それぞれのオブジェクト専用。

class Greeter
  def initialize(name)
    @name = name
  end
  def say(phrase)
    puts "#{phrase}、#{name}"
  end
end
g1 = Greeter.new("Fred")
g2 = Greeter.new("Wilma")
g1.say("こんにちは")	#=> こんにちは、Fred
g2.say("やあ")          #=> やあ、Wilma

クラス外部からは、インスタンス変数に直接アクセスできない。インスタンス変数の値を外部で使うには、その値を返すメソッドを定義する必要がある。

class Greeter
  def initialize(name)
    @name = name
  end
  def name
    @name
  end
  def name=(new_name)
    @name = new_name
  end
end
g = Greeter.new("Barney")
puts g.name		#=>Barney
g = Greeter.new("Betty")
puts g.name		#=>Betty

※Rubyには、このようなアクセサメソッドを自動的に作成してくれる便利なメソッドが用意されている。

class Greeter
attr_accessor :name		#読込用と書き込み用のメソッドを作成
attr_reader :greeting	#読み込み用のメソッドのみを作成
attr_writer :age		#書き込み用のメソッドのみを作成










最終更新:2008年05月23日 16:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。