静岡理工科大学 | 菅沼ホーム | Ruby 目次 | 索引 |
if 式1 [then] 式2 [elsif 式3 [then] 式4 ] ・・・ [else 式5 ] end
式1 if 式2
y = 10, z = 0
x = 5 y = 10 if x > 0 z = 20 if x < 0 printf "y = %d, z = %d\n", y, z
unless 式1 [then] 式2 [else 式3] end
式1 unless 式2
case [式0] [when 式1 [, 式2] ・・・ [, *式m] [then] 式n] ・・・ [when *式p [then] 式q] ・・・ [else 式r] end
x = 5 y = -6 # case 例1 case x+y when 1, 2, 3 printf "結果は正\n" when -3, -2, -1 printf "結果は負\n" else printf "結果は0\n" end # case 例2(範囲式) case x+y when 1 .. 3 printf "結果は正\n" when -3 .. -1 printf "結果は負\n" else printf "結果は0\n" end # case 例3(配列) a = [1, 2, 3] b = [-3, -2, -1] case x+y when *a printf "結果は正\n" when *b printf "結果は負\n" else printf "結果は0\n" end # case 例4( if による書き換え) z = x + y if z === 1 || z === 2 || z === 3 printf "結果は正\n" elseif z === -1 || z === -2 || z === -3 printf "結果は負\n" else printf "結果は0\n" end
while 式1 [do] 式2 end
式1 while 式2
sleep(60) while io_not_ready?
until 式1 [do] 式2 end
式1 until 式2
for ループ変数 in 式1 [do] 式2 end
for i in [1, 2, 3] printf "%d ", i end printf "\n" # 範囲式を利用 for i in 1 .. 3 printf "%d ", i end printf "\n" # 複数のループ変数 for i, j in [[1, 2], [3, 4], [5, 6]] printf "%d,%d ", i, j end printf "\n"
1 2 3 1 2 3 1,2 3,4 5,6
break
next
redo
retry
printf "Example of break\n" for i in [1, 2, 3] printf " i(first) = %d\n", i if i == 2 break end printf " i(second) = %d\n", i end printf "Example of next\n" for i in [1, 2, 3] printf " i(first) = %d\n", i if i == 2 next end printf " i(second) = %d\n", i end printf "Example of redo\n" state = 0 for i in [1, 2, 3] printf " i(first) = %d\n", i if i == 2 && state == 0 state = 1 redo end printf " i(second) = %d\n", i end printf "Example of retry\n" state = 0 for i in [1, 2, 3] printf " i(first) = %d\n", i if i == 2 && state == 0 state = 1 retry end printf " i(second) = %d\n", i end
Example of break i(first) = 1 i(second) = 1 i(first) = 2 Example of next i(first) = 1 i(second) = 1 i(first) = 2 i(first) = 3 i(second) = 3 Example of redo i(first) = 1 i(second) = 1 i(first) = 2 i(first) = 2 i(second) = 2 i(first) = 3 i(second) = 3 Example of retry i(first) = 1 i(second) = 1 i(first) = 2 i(first) = 1 i(second) = 1 i(first) = 2 i(second) = 2 i(first) = 3 i(second) = 3
begin 式1 [rescue [error_type,・・・] [=> evar] [then] 式2] ・・・・・ [else 式n] [ensure 式m] end
raise raise messageまたはexception raise error_type, message raise error_type, message, traceback
#<ZeroDivisionError: divided by 0> ["test.rb:3:in `/'", "test.rb:3"] #<RuntimeError: エラー発生!> ["test.rb:4"] 最後の処理 y = 5
x = 0 begin y = 10 / x raise "エラー発生!" rescue ZeroDivisionError p $! p $@ x = 2 retry rescue p $! p $@ ensure printf "最後の処理\n" end printf "y = %d\n", y
静岡理工科大学 | 菅沼ホーム | Ruby 目次 | 索引 |