Ruby1.8.5の制御構造

感想おまちしてます!

条件分岐

if 

value = 100   #変数の宣言 型はないのですべてオブジェクトとなる

#if文
if value > 90 then
puts "value is larger than 90"
elsif value > 50 then
puts "value is larger than 50"
else
puts "value is smaller than 50"
end

実行結果

value is larger than 90

if修飾子 

#if修飾子
puts "おっけーだぜ" if true #右辺を評価して左辺へいく

実行結果

おっけーだぜ

unless 

value = 100
#unless elsifはできない
unless value > 90 then
puts "90よりでかくないよーん"
else
puts "90よりでかいよーん"
end

実行結果

90よりでかいよーん

unless修飾子 

#unless修飾子
puts "否!" unless false #trueだとputsされない

実行結果

否!

case 

#case
case value
when 0 .. 99 #0?99という意味
puts "0?99だよーん"

when 99 .. 100
puts "99,100だよーん"

else
puts "0?100いがいだよーん"
end

実行結果

99,100だよーん

繰り返し 

while 

#while
value = 100
while value > 0
value = value - 1
end

puts value

実行結果

0

while修飾子 

#while修飾子
value = 0
value = value + 1 while value < 100 #valueが100以下の場合に左辺を実行

実行結果

100

until 

#until
value = 100
until value > 200
value = value + 1
end

実行結果

201

until修飾子

#until修飾子
value = 201
value = value - 1 until value < 0

実行結果

-1

for 

#for
for i in [1, 2, 3]
puts i
end

実行結果

1
2
3

break 

#break
for i in [1, 2, 3]
puts i
break
end

実行結果

1

next 

#next
for i in [1, 2, 3]
puts i
next
puts i
end

実行結果

1
2
3

redo 

#redo
isFirst = true
for i in [100, 200, 300]

if isFirst then
isFirst = false
puts i
redo
end

puts i
end

実行結果

100
100
200
300

retry 

#retry
isFirst = true
for i in [1000, 2000, 3000]
if isFirst then
isFirst = false
puts i
redo
end

puts i

end

実行結果

1000
1000
2000
3000

例外処理 

raise 

 raise "fujihara"    #RuntimeError
#raise SyntaxError, "fujihara" #SyntacError
#raise SyntaxError.new("fujihara") #SyntaxError
#raise "dai"
#raise #最後に発生した例外

beginとrescue修飾子 

#例外処理
begin
raise "fujihara" #RuntimeError

rescue => e
puts "例外をキャッチしたぜ"
puts $!
puts e #eに格納されている

ensure 

#例外処理
begin
raise "fujihara" #RuntimeError

rescue => e #StandardErrorのサブクラスなら全てをキャッチ
#resucue TypeError => e これならTypeErrorをキャッチしてくれる
puts "例外をキャッチしたぜ"
puts $!
puts e #eに格納されている

else
#begin節の最後までいったら実行される

ensure
puts "後処理です"
end

その他 

return 

BEGIN 

#BEGIN 前処理
BEGIN {
puts "一番早いぜ"
}

BEGIN {
puts "BEGINだけど2個目だぜ"
}

実行結果

一番早いぜ
BEGINだけど2個目だぜ
・・・

END 

END{
puts "一番遅いぜ"
}

END{
puts "ENDだけど2個目だぜ"
}

実行結果

ENDだけど2個目だぜ
一番遅いぜ