English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby ループ

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

Ruby while

文法

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

Ruby while 修飾子

文法

条件式で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

Ruby until

文法

条件式が成立するまで
   を定義しています。
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

Ruby until 修飾子

文法

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

Ruby for

文法

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

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

ループの次の反復にスキップします。ブロック内で呼び出された場合、ブロックの実行を終了します(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

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

もし 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
............................