LoginSignup
18
18

More than 5 years have passed since last update.

Ruby Steady 1 変数と代入

Last updated at Posted at 2012-12-26

ローカル変数

  • 小文字
  • アンダースコア(_)で始まる
  • 初期化されていない場合は 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"]
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18