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

コメント