English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Rubyのループは同じコードブロックを何度も実行するために使用されます。この章では、Rubyがサポートするすべてのループ文を詳しく説明します。
while conditional [do] を定義しています。 end
または
while conditional [:] を定義しています。 end
当 conditional が真であれば、実行 を定義しています。。
语法ではdoまたは:を省略することができますが、一行でwhile文を書く場合は、条件式またはプログラムブロックを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
条件式でwhile または begin を定義しています。 条件式が成立するまで
当 conditional が真であれば、実行 を定義しています。。
もし while 修飾子が、 rescue または ensure 子句の begin 文の後、を定義しています。 が、 conditional 前回の実行を判断します。
#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("ループ文で i = #$i" ) $i +=1 while $i < $num
上記の例の出力結果は以下の通りです:
ループ文では i = 0 ループ文では i = 1 ループ文では i = 2 ループ文では i = 3 ループ文では i = 4
条件式が成立するまで を定義しています。 end
当 conditional が偽であれば、実行します。 を定義しています。。
文法では do を省略することができますが、一行で until 式を書く場合は、条件式やコードブロックを 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
code until conditional または begin を定義しています。 end until conditional
当 conditional が false であれば、実行します。 を定義しています。。
もし until 修飾子が、 rescue または ensure 子句の begin 文の後、を定義しています。 が、 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
for variable [, variable ...] in expression [do] を定義しています。 end
式を先に計算してオブジェクトを得た後、 expression 中の各要素をそれぞれ一度実行します。 を定義しています。。
#!/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 式を書く場合は、条件式やコードブロックを do で区切る必要があります。
#!/usr/bin/ruby # -*- coding: UTF-8 -*- (0..5).each do |i| puts "ローカル変数の値は #{i}" end
上記の例の出力結果は以下の通りです:
ローカル変数の値が 0 です。 ローカル変数の値は 1 ローカル変数の値は 2 ローカル変数の値は 3 ローカル変数の値は 4 ローカル変数の値は 5
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
next
ループの次の反復にスキップします。ブロック内で呼び出された場合、ブロックの実行を終了します(yield 式が 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
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 です。 ............................
注意:1.9以降のバージョンでは、ループ内で retry を使用することはサポートしていません。
retry
もし retry 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 ............................