Ruby1.8.5の変数と定数

ローカル変数 

トップレベルの変数はプログラムの終わりまで有効 

if true then
local_param = "ifの中"
end

puts local_param

実行結果

ifの中
ifの中

インスタンス変数 

オブジェクトに固有の変数

class TestClass   #クラス名は大文字始まり

TEISU = "定数" #定数は大文字から始まると勝手になる

@instance_param = "instance_param" #インスタンス変数

def printMessage(message)
puts @instance_param
@instance_param = "instance_param 2"
puts @instance_param
puts message
end

end

test_class = TestClass.new #インスタンス作成
test_class.printMessage("message")

実行結果

nil               #一回目はnilになる
instance_param 2 #代入した値が入る
message

クラス変数 

  • 再代入可能(定数は警告を出す)
  • クラスの外から直接参照できない(継承されたクラスからは参照/代入可能)
  • サブクラスから参照/代入が可能
  • インスタンスメソッドから参照/代入が可能
class ClassParam
@@class_param = 1

def getClassParam()
return @@class_param
end
end

class Child01 < ClassParam
p @@class_param += 1
end

class Child02 < ClassParam
p @@class_param += 1
end

class ChildChild01 < Child02
p @@class_param += 1
end

test_class = ClassParam.new
puts "@@class_paramの値"
puts test_class.getClassParam()

実行結果

@@class_paramの値
4

グローバル変数

プログラムのどこからでも参照できる変数

puts $global_param

class GlobalParam

$global_param = "これはGlobalなのだ"

def getGlobal()
return $global_param
end

end

puts $global_param
test_class = GlobalParam.new
puts test_class.getGlobal()

class TestClass

def print()
puts $global_param
$global_param = "変更してみる"
puts $global_param
end

end

test_class = TestClass.new
test_class.print()

実行結果

nil
これはGlobalなのだ
これはGlobalなのだ
これはGlobalなのだ
変更してみる

疑似変数

self 

現在のメソッドの実行主体

puts self

class TestClass

def print()
puts self
self.print2()
end

def print2()
puts "print2"
end

end

cls = TestClass.new
cls.print()

実行結果

main
#<TestClass:0x296c380>
print2

nil 

NilClassクラスの唯一のインスタンス

true 

TrueClassクラスの唯一のインスタンス。真の代表値

false 

FalseClassクラスの唯一のインスタンス。nilとfalseは偽を表します。

ソースファイル名と行番号 

「__FILE__」・・・現在のソースファイル名 *1
「__LINE__」・・・現在のソースファイル中の行番号

puts __FILE__
puts __LINE__
puts __LINE__

実行結果

D:/daipresents/project/ruby/src/test/file_name_line_number.rb
2
3

定数 

大文字で始まる変数は定数となる。

class Constance
TEISU = "これは定数だよー"
end

puts Constance::TEISU #::でアクセス

実行結果

これは定数だよー