5-5-3 それぞれの繰り返し処理の構文

until文の構文

until文は、後に続く条件式がtrueになるまで処理を繰り返します。while文は、条件式がfalseになるまで処理を繰り返すので、until文はその逆です。

until文の書式をまとめると以下の通りです。

until(条件式) do
  # 条件式がfalseの場合実行される処理
end

for文の構文

for文は、forを記述して繰り返したい処理の中で使う変数を定義し、inの後に配列やハッシュなど繰り返したいオブジェクトを記述します。

繰り返したい処理をdoendで囲みます。

for文は、配列やハッシュの繰り返し処理で学んだeachメソッドと似ており、eachを使って書き換えることができます。

inの後に記述するオブジェクトがハッシュの場合は、forの後の変数を1つまたは2つ取ることができます。この動作はeachの場合と同様です。

for文の書式をまとめると以下の通りです。

forin オブジェクト do
  # オブジェクトの回数分繰り返す処理
end

uptoメソッドの構文

uptoメソッドは、数値にドット(.)を繋げて使います。引数に指定した数値まで、1ずつ数値を繰り上げながら処理を繰り返します。

繰り返し処理のブロックには、|変数|で数値を渡すことができます。

元の数値を繰り上げるので、引数に指定する数値がuptoメソッドの先頭に記述した数値以上でないと繰り返し処理は実行されません。

uptoメソッドの書式をまとめると以下の通りです。

数値1.upto(数値2) do |変数|
  # 数値1から数値2まで1ずつ繰り上げて処理を繰り返す
end

downtoメソッドの構文

downtoメソッドも、uptoメソッドと構文はそっくりです。違うのはuptoメソッドのように繰り上げではなく、数値を繰り下げる点です。

downtoメソッドでは、先頭に記述した数値が引数に指定する数値以上でないと繰り返し処理は実行されません。

downtoメソッドの書式をまとめると以下の通りです。

数値1.downto(数値2) do |変数|
  # 数値1から数値2まで1ずつ繰り下げて処理を繰り返す
end

stepメソッドの構文

stepメソッドもuptoメソッドと少し似ていますが、違いは引数を2つ取ることです。

1つ目の引数に繰り上げる数値の最大値を指定するのは、uptoメソッド同様です。2つ目の引数には、繰り上げる数値の幅を指定することができます。

uptoメソッドは、繰り上げる数値は1ずつ固定ですが、stepメソッドは固定ではなく指定できるというわけです。

なお、この繰り上げの数値を負の数(マイナス)にすることで繰り下げることもできます。

stepメソッドの書式をまとめると以下の通りです。

数値1.step(数値2, 数値の幅) do |変数|
  # 数値1から数値2まで「数値の幅」ずつ変化させ処理を繰り返す
end

loopメソッドの構文

loopメソッドは、簡単に無限ループを記述することができます。loopの後に繰り返したい処理のブロックをdoendまたは{}で囲みます。

loopは、while(true)と同じように動きます。

loopメソッドの書式をまとめると以下の通りです。

loop do
  # 繰り返す処理
end

mapメソッドの構文

mapメソッドは、元の配列やハッシュなどのオブジェクトの1つ1つの要素に対して、同じ処理を繰り返した後、新しい配列を返します。

オブジェクトにドット(.)でmapを繋げ、doendまたは{}のブロックに繰り返したい処理を記述します。

ブロックの先頭に|変数|と記述することで、元のオブジェクトの1つ1つの要素をブロックの中で使うことができます。

mapメソッドの書式をまとめると以下の通りです。

オブジェクト.map do |変数|
  # 繰り返す処理
end

any?メソッドの構文

any?メソッドは、trueまたはfalseで評価される条件式の配列の中に1つでもtrueがあればtrueを返します。

逆に1つもtrueがなければfalseを返します。いいかえるとすべてfalseであればfalseを返す、ともいえます。

オブジェクトにドット(.)でany?をつなげて使います。

なおRubyのメソッドにおいて、any?メソッドのようにメソッド名の末尾にクエスチョンマーク(?)がつくものは、そのメソッドが真偽値であるtruefalseを返します。

any?メソッドの書式をまとめると以下の通りです。

[条件式1, 条件式2, ...].any? # 条件式に1つでもtrueがあればtrue

selectメソッドの構文

selectメソッドは、配列などのオブジェクトの各要素が条件に一致したものだけをピックアップして新しい配列を返します。

いいかえると、元のオブジェクトから条件に一致しないものを除外した配列を返す、ともいえます。

オブジェクトにドット(.)でselectを繋げ、doendまたは{}のブロックに条件式を記述します。

mapメソッド同様、ブロックの先頭に|変数|と記述して、元のオブジェクトの1つ1つの要素をブロックの中で使うことができます。

selectメソッドの書式をまとめると以下の通りです。

オブジェクト.select do |変数|
  # 繰り返す処理
end

色々な繰り返し処理の構文のまとめ

  • while文と条件が逆の構文にuntil文がある
  • 指定した数値から数値まで繰り返し処理を行うにはuptodowntostepメソッドを使う
  • 無限ループを簡単に実装するにはloopメソッドを使う
  • Enumerableモジュールによって便利で強力なメソッドがたくさん提供されている