4月 7th, 2008at 16:13
Tags: Ruby
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
#casecase value when 0 .. 99 #0?99という意味 puts "0?99だよーん" when 99 .. 100 puts "99,100だよーん" else puts "0?100いがいだよーん"end
実行結果
99,100だよーん
繰り返し
while
#whilevalue = 100while value > 0 value = value - 1end puts value
実行結果
0
while修飾子
#while修飾子value = 0value = value + 1 while value < 100 #valueが100以下の場合に左辺を実行
実行結果
100
until
#untilvalue = 100until value > 200 value = value + 1end
実行結果
201
until修飾子
#until修飾子value = 201value = value - 1 until value < 0
実行結果
-1
for
#forfor i in [1, 2, 3] puts iend
実行結果
123
break
#breakfor i in [1, 2, 3] puts i breakend
実行結果
1
next
#nextfor i in [1, 2, 3] puts i next puts iend
実行結果
123
redo
#redoisFirst = truefor i in [100, 200, 300] if isFirst then isFirst = false puts i redo end puts iend
実行結果
100100200300
retry
#retryisFirst = truefor i in [1000, 2000, 3000] if isFirst then isFirst = false puts i redo end puts i end
実行結果
1000100020003000
例外処理
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個目だぜ一番遅いぜ




