Code Log

プログラミングの勉強メモを残していきます。

Rubyの変数の使い方をまとめた。クラス変数やインスタンス変数の宣言の方法など。


<スポンサーリンク>

Rubyには以下の変数がある。


グローバル変数

Rubyのグローバル変数は$から始まる必要がある。

$global

bar = "foo"
def hello
  local = "fuga"
  puts $global #hogeと表示される
  #puts bar #アクセスできない(undefined local variable or method `bar' for main:Object (NameError))
end

$global = "hoge"


hello

#puts local #->localにはアクセスできない

ローカル変数

ローカル変数は以下の範囲内をスコープとしている。
  • ブロック
  • クラス・モジュール定義
  • メソッド定義
  • トップレベル

定数

定数名は大文字アルファベットで始まる必要がある。
メソッドの中で定数の定義を行うことはできない。

インスタンス変数

インスタンスの中でだけ参照できる変数をインスタンス変数という。
インスタンス変数を使うことで、オブジェクトの状態を保持することができる。
インスタンス変数は「@my_client」のように、@から始まる名前をつける。

# encoding:utf-8

class Friend
  def name=(val)
  	@name = val
  end

  def name
  	@name
  end
end

takeshi = Friend.new

takeshi.name = "takeshi"

puts takeshi.name #"takeshi"と表示される

今回はセッターゲッターのようなものを明示的に書く例にしたが、実際にインスタンス変数にアクセスするメソッドがほしい時は、

attr_accessor :name

と定義すればいい。


クラス変数

クラス変数は、クラスとそのインスタンスをスコープとした変数のこと。
Javaでいうとstaticをつけた変数のことだ。

クラス変数はクラスにひっついている変数のイメージで、インスタンス化しなくても使うことができる。

# encoding:utf-8

class Friend
  @@message = 'OK, I am your friend!'

  def self.say_static_message
    puts @@message
  end

end

Friend.say_static_message #'OK, I am your friend!'と表示される

ついでに、クラスメソッドの定義の仕方は、self.メソッド名とやればいい。


<参考文献>
パーフェクトRuby (PERFECT SERIES 6)