C言語と違うところ4

  • 変数とスコープ

「スコープ」⇒ 変数が有効な範囲

これは分かる気がする(・ω・)

$var = 10 # $マークをつける

def sample
  p $var #=> 10
end

p $var #=> 10

インスタンス変数とは、
クラスから生成されたインスタンス(オブジェクト)毎に
別の値を持つことができる変数。

class Sample
  def initialize(width = 100, height = 100) # 初期化メソッド定義
    @width = width
    @height = height
  end
  attr_accessor :width, :height # インスタンス変数を外から参照・代入できるように
end

sample = Sample.new(150, 250)

p sample.width #=> 150
p sample.height #=> 250
    • クラス変数

クラス変数は、
そのクラスの全てのインスタンスで共有される変数。

class Sample
  @@cvar = 0
  def initialize(width = 100, height = 100)
    @width = width
    @height = height
  end

  def cvar; @@cvar; end
  def cvar=(x); @@cvar = x; end
  attr_accessor :width, :height
end

sample = Sample.new(150, 250)
sample.cvar = 300

sample1 = Sample.new(10, 20)

p sample.width #=> 150
p sample1.width #=> 10
p sample.cvar #=> 300
p sample1.cvar #=> 300⇒クラス変数なのでsample1のcavrメソッドも300を返す
    • ローカル変数

ローカル変数は、
メソッド内などの特定の範囲でのみ使用される変数

var = 0

class Sample
  def initialize
    var = 1 # このvarは上のとは別もの
  end
end

Sample.new

p var #=> 0