読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Rubyのクラス変数とインスタンス変数

Ruby
<スポンサーリンク>

クラス変数

クラス変数はクラスのインスタンスにではなく、クラスに結び付けられた変数である。
Rubyだとインスタンス変数名にもう1つのアットマーク(@)を付け加えると、クラス変数を宣言できる。
これはJavaでいうstatic変数である。
以下は、インスタンス変数とクラス変数の違いを示したサンプル。

class Variable
  @@class_count = 0

  def initialize
    @instance_count = 0
  end

  def increment
    @@class_count = @@class_count + 1
    @instance_count = @instance_count + 1
  end

  def to_s
    "class_count: #{@@class_count} instance_count: #{@instance_count}"
  end
end

class1 = Variable.new
class1.increment
class1.increment
puts("class1: #{class1}")

class2 = Variable.new()
class2.increment
class2.increment
puts("class2:#{class2}")

class3 = Variable.new()
class3.increment
puts("class3:#{class3}")

結果はこうなる。

class1: class_count: 2 instance_count: 2
class2:class_count: 4 instance_count: 2
class3:class_count: 5 instance_count: 1

クラス変数はクラス自体にひっついているため、インスタンスが何個できても、そのインスタンス間で変数の値が共有される。
一方で、インスタンス変数は、新しいインスタンスごとに所属するため、class2,class3ができるとゼロリセットされている。

この記事の内容を勉強した本

Rubyによるデザインパターン

Rubyによるデザインパターン