はじめに
Rubyにはいくつもの変数の種類があります。
理解して使いこなすことが、開発レベルやコードの綺麗さが向上します。
スコープによって、いくつかの種類に分けられていますので、使いこなせるようにしましょう!
ローカル変数
最もスコープの狭い種類の変数。
スコープの範囲は、、、
・ブロック
・メソッド定義
・クラス、モジュール定義
・トップレベル
foo = 'foo'
def puts_foo
puts foo #=> NameError
end
puts foo #=> 'foo'と表示
グローバル変数
非常に広いスコープを持つ変数。存在しないグローバル変数を指定するとnilを返す。
※可読性が下がる可能性があるため、あまり使用しない
スコープの範囲は、どこからでも参照可能です。
$foo = 'foo'
puts $bar #=> nil
定数
変化しない値を扱う変数。大文字で定義するのが慣習です。
※再代入すると、警告が出るが禁止はされていない。
FOO = 'FOO'
puts FOO #=> 'FOO'
def bar
BAR = 'BAR' #=> 文法エラー
end
インスタンス変数
インスタンスの中でのみ参照できる変数。「@〜」から始まる変数。
class Ruler
def length=(val)
@length = val
end
def length
@length
end
ruler = Ruler.new
ruler.length = 30
ruler.length #=> 30
end
attr_accessor
を利用することで、簡単に定義出来ます。
class Ruler
attr_accessor :length
・
・
・
end
クラス変数
クラスとそのインスタンスをスコープとした変数。「@@〜」から始まる変数。
class Foo
@@foo = 'foo'
def foo
puts @@foo
end
def self.foo
puts @@foo
end
foo_class = Foo.new
foo_class.foo #=> 'foo'
Foo.foo #=> 'foo'
終わりに
普段使うもの、あまり使わないもの、いろいろありますが知識として持っておくことで、使い分けが可能になります!