Ruby ループ

Ruby のループは、同じコードブロックを複数回実行するために使用します。この章では、Ruby がサポートするすべてのループ文について詳しく説明します。

Ruby while文

構文

while conditional [do] code end

または

構文

while conditional [:] code end

当 conditional真である間、実行するcode。

構文内の do または : は省略できます。ただし、while 式を 1 行で記述する場合は、do または : で条件式とプログラムブロックを区切る必要があります。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 while $i < $num do puts("ループ文内で i = #$i" ) $i +=1 end

試してみる »

上記の例の出力結果は次のとおりです:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

Ruby while修飾子

構文

code while conditionまたはbegin code end while conditional

当 conditional真である間、実行するcode。

もしwhile修飾子が、rescueまたは ensure 節を持たないbegin文の後では、code条件の判定の前にconditional一度実行されます。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("ループ文内で i = #$i" ) $i +=1 end while $i < $num

試してみる »

上記の例の出力結果は次のとおりです:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

Ruby until文

構文

until conditional [do] code end

当 conditional偽である間、実行するcode。

構文内の do は省略できます。ただし、until 式を 1 行で記述する場合は、do で条件式とプログラムブロックを区切る必要があります。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 until $i > $num do puts("ループ文内で i = #$i" ) $i +=1; end

試してみる »

上記の例の出力結果は次のとおりです:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

Ruby until修飾子

構文

code until conditionalまたはbegin code end until conditional

当 conditionalfalse である間、実行するcode。

もしuntil修飾子が、rescueまたは ensure 節を持たないbegin文の後では、code条件の判定の前にconditional一度実行されます。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("ループ文内で i = #$i" ) $i +=1; end until $i > $num

試してみる »

上記の例の出力結果は次のとおりです:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

Ruby for文

構文

for variable [, variable ...] in expression [do] code end

まず式を評価してオブジェクトを取得し、そのexpression中の各要素に対して、それぞれ一度ずつ実行します。code。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 puts "ローカル変数の値は #{i} です" end

試してみる »

ここでは、範囲 0..5 を定義しています。for i in 0..5 という文では、i の値は 0 から 5(5 を含む)になります。

上記の例の出力結果は次のとおりです:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

for...inループは、次のものとほぼ完全に等価です:

(expression).each do |variable[, variable...]| code end

ただし、for ループはローカル変数に対して新しいスコープを作成しません。

構文内の do は省略できます。ただし、for 式を 1 行で記述する場合は、do で条件式とプログラムブロックを区切る必要があります。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- (0..5).each do |i| puts "ローカル変数の値は #{i} です" end

試してみる »

上記の例の出力結果は次のとおりです:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby break文

構文

break

最も内側のループを終了します。ブロック内で呼び出された場合は、そのブロックを呼び出したメソッドを終了します(メソッドは nil を返します)。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i > 2 then break end puts "ローカル変数の値は #{i} です" end

試してみる »

上記の例の出力結果は次のとおりです:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2

Ruby next文

構文

next

ループの次の反復に進みます。ブロック内で呼び出された場合は、ブロックの実行を終了します(yieldnext 式は nil を返します)。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then next end puts "ローカル変数の値は #{i} です" end

試してみる »

上記の例の出力結果は次のとおりです:

局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby redo文

構文

redo

最も内側のループの現在の反復を、ループ条件をチェックせずにやり直します。ブロック内で呼び出された場合は、やり直します。yield 或 call。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then puts "ローカル変数の値は #{i} です" redo end end

これにより、次の結果が生成され、無限ループに入ります:

局部变量的值为 0
局部变量的值为 0
............................

Ruby retry文

注意:1.9 以降のバージョンでは、ループ内での retry の使用はサポートされていません。

構文

retry

もしretryretry が begin 式の rescue 節に現れた場合、begin 本体の先頭からやり直します。

begin do_something #発生した例外 rescue #エラー処理 retry #begin の先頭からやり直す end

retry がイテレータ内、ブロック内、または for 式の本体に現れた場合、イテレータ呼び出しをやり直します。イテレータの引数は再評価されます。

for i in 1..5 retry if some_condition #i == 1 からやり直します end

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 1..5 retry if i > 2 puts "ローカル変数の値は #{i} です" end

これにより、次の結果が生成され、無限ループに入ります:

局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
............................
その他の拡張