Ruby クラス変数とクラスメソッド
Ruby クラス変数とクラスメソッド
1. クラス変数
- クラス自体に値を保持することができる変数
- Rubyで、クラス変数はクラス自体に属する変数で、 クラス変数はクラス内のすべてのインスタンス間で共有され、クラスメソッドからもアクセスできる。
- クラス変数の名前は常に@@で始まります。 これは、インスタンス変数との主な違いの 1 つで、 インスタンス変数は、各オブジェクト インスタンスに対して別々に存在し、@で始まる。
- クラス変数を使用する主な理由は、特定のクラスに関連するステータスや情報をすべてのインスタンス間で共有するためで、 たとえば、クラス インスタンスの総数を追跡したり、クラスに関連付けられた設定を保存したりするために使用できる。
class Car
def initialize(name)
@name = name
end
def hello
puts "Hello, I am #{@name}"
end
end
car = Car.new('ar')
car.hello
例題
- Car クラスのインスタンスが作成された回数をカウントして出力する。
class Car
@@count = 0
def initialize(name)
@name = name
@@count += 1
end
def hello
puts "Hello, I am #{@name}. #{@@count} instance(s)"
end
end
car1 = Car.new('ar')
car1.hello
car2 = Car.new('IT')
car2.hello
car3 = Car.new('Ruby')
car3.hello
2. クラスメソッド
- クラスから直接呼ぶことができるメソッド
- Rubyで、クラスメソッドはクラス自体に属するメソッドで、 これらのメソッドは、特定のインスタンスではなく、クラス自体を介して呼び出される。 クラスメソッドは、クラスのインスタンス(オブジェクト)ではなく、クラス自体に関連するタスクを実行するために使用される。
クラスメソッドを定義する方法
1) メソッドの名前にself.
例題
- Classメソッド infoを定義する。
- クラスメソッド infoを実行すると、インスタンスの生成回数(@@count)を出力する。
class Person
@@count = 0
def initialize(name)
@name = name
@@count += 1
end
def hello
puts "Hello, #{@name}, #{@@count}"
end
def self.info
puts "#{@@count}"
end
end
person = Person.new('AR')
person.hello
Person.info
self.infoでselfは現在のクラス、つまりPersonクラスを指しっている。 したがって、self.infoはPerson.infoと呼び出される。 このようにクラスメソッドを使用すると、クラスレベルでデータや機能を管理でき、インスタンスの生成なしにクラス名を通じて直接アクセスできる。
2) class << self ブロック内のメソッドを定義する方法
class MyClass
class << self
def my_class_method
puts "This is a class method."
end
end
end
MyClass.my_class_method