Edited at

Ruby Steady 1 変数と代入

More than 1 year has passed since last update.


ローカル変数


  • 小文字

  • アンダースコア(_)で始まる

  • 初期化されていない場合は 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"]