ローカル変数
- 小文字
- アンダースコア(_)で始まる
- 初期化されていない場合は nil が返る
- ブロックの外側で宣言されたローカル変数はブロック内でも有効
- ブロックの内側で宣言された場合はエラー(NameError)となる
local.rb
greeting = "Hello"
p greeting + " Ruby!" #Hello Ruby!
def foo
p greeting #有効
bar = "test"
end
p bar #これは無効(エラー)
グローバル変数
- 先頭を$にする
- 予約されたグローバル変数がある、例えば$0は実行ファイル名を表示する
- 他に$LOAD_PATH, $&, $*などがある
global.rb
def foo
$greeting = "Hello"
end
p $greeting #Hello"
p $0 #/foo/bar/global.rb
定数
- 先頭がアルファベットの大文字
- 再代入すると警告が発生
- ただし、変数への参照先のオブジェクト自体に変化があった場合は警告とならない
const.rb
Const = "Hello Ruby!"
p Const #Hello Ruby!
Const = "Hello Java!"
# warning: already initialized constant Const
p Const #Hello Java!
Const.sub!("Java", "Perl")
p Const #Hello Perl!
クラス変数
- クラス変数はクラスが持つ変数、複数のインスタンスからアクセス可能
- 先頭にアットマーク2つ(@@)
- クラス内からのみ参照可能
classValue.rb
class Foo
@@foo = "first"
def bar
p @@foo
end
def change
@@foo = "second"
end
end
f1 = Foo.new()
f1.bar #first
f2 = Foo.new()
f2.bar #first
f2.change
f1.bar #second
f2.bar #second
# f1.foo や f1.@@fooはエラー
インスタンス変数
- インスタンスが持つ変数
- 先頭にアットマーク(@)
- インスタンス間で共有されることはない
- 外部からのアクセスは不可、アクセサメソッドを利用する
instanceValue.rb
class Foo
def initialize
@foo = "first"
end
def getFoo
@foo
end
def setFoo(val)
@foo = val
end
end
f1 = Foo.new()
p f1.getFoo
f2 = Foo.new()
p f2.getFoo #first
f2.setFoo('second')
p f2.getFoo #second
p f1.getFoo #first
擬似変数
真・・・true、falseとnil以外の値
偽・・・false, nil
__FILE__
現在実行されているプログラムのファイル名
__LINE__
現在実行されているプログラムのファイル内の行番号
false
偽を表すオブジェクト
true
真を表すオブジェクト
self
インスタンス自体への参照
nil
変数の参照先のオブジェクトがないことをあらわす。偽としても使用可能
自己代入
2項演算子のうち、下記のものは自己代入が可能
+
-
*
/
%
**
&
|
^
>>
<<
&&
||
self.rb
num = 10
num += 10
p num #20
num >>= 2
p num #5
多重代入
- 複数の変数に対し、一度の代入操作で値を代入することができる
- 変数と代入する値をそれぞれカンマ(,)で区切る
multipleassignment.rb
var1 , var2 = "val1", "val2"
var1 , var2 = var2, var1
lang1, lang2 = ["Ruby","Perl"]