クラス変数&クラスメソッド

クラス変数はクラスのすべてのオブジェクトで共有され、クラスメソッドを使ってアクセスできます。クラス変数は使用する前に必ず初期化しなければなりません。

class Song

@@plays = 0

def initialize(name, artist, duration)


@name = name
@artist = artist
@duration = duration

end

def play


@plays += 1
@@plays += 1
“【演奏回数
】この曲:#@plays回 すべての曲:#@@plays回”

end
end

クラス変数はクラスとそのインスタンスに閉じた変数です。クラス変数に外部からアクセスしたい場合は、アクセサメソッド(インスタンスメソッド/クラスメソッド)を書く必要があります。

class Example

def instance_method #インスタンスメソッド
end

def Example.class_method #クラスメソッド
end
end

例として、特定の曲が演奏時間の制限を超えているかどうかチェックするクラスメソッドを SongList に定義します。

class SongList
MAX_TIME = 5*60 #時間制限5分(クラス定数に設定)
def SongList.is_too_long(song)
return song.duration > MAX_TIME
end
end
song1 = Song.new(”曲1”, “演奏者1”, 230)
SongList.is_too_long(song1) → false
song2 = Song.new(”曲2”, “演奏者2”, 560)
SongList.is_too_long(song2) → true

クラス内にクラスメソッドを定義する方法

class Demo
def Demo.method1
end
def self.method2
end
class <<self
def method3
end
end
end

例として、正多角形を表すクラス Shape があるとします。Shape のインスタンスは、コンストラクタに辺の数と周辺長を与えると作成されます。

class Shape
def initialize(num_sides, perimeter)
end
end

しかし、このクラスは異なるアプリケーションで使われ、正多角形の名前と一辺の長さを指定してインスタンスを作成する使い方にしたい場合、単純に次のようにクラスメソッドを Shape に追加します。

class Shape
def Shape.triangle(side_length)
Shape.new(3, side_length*3)
end
def Shape.square(side_length)
Shape.new(4, side_length*4)
end
end

コメント

(必須)

(必須)
(メールアドレスは公開されません)