Rubyの繰り返し処理でよく使いそうなものをまとめました。
Rubyの繰り返し
構文 |
用途 |
while文 |
条件に指定した式が真の間、処理を繰り返し実行する構文 |
until文 |
条件に指定した式が偽の間、処理を繰り返し実行する構文 |
for文 |
inに指定したオブジェクトの各要素に対して、繰り返し処理を実行する構文 |
Kernel.#loop |
無限ループを作るメソッド |
Array#each |
オブジェクトのリストに対して繰り返し処理を適用するメソッド |
Integer#times |
レシーバの整数の数だけループを実行するメソッド |
Integer#upto, Integer#downto |
レシーバの整数から引数で指定した整数になるまで、カウンターを増加/減少させて繰り返し処理を実行するメソッド |
String#upto |
レシーバの文字列から引数で指定した文字列になるまで、文字列を進めながら繰り返し処理を実行するメソッド 次の文字列の定義は、こちら |
while文
while ... [do]
文は、条件に指定した式が真の間、処理を繰り返すことができます。
until文
until ... [do]
文は、条件に指定した式が偽の間、処理を繰り返すことができます。
for文
for文は、for ... in ... [do] ... end
の形式で使用し、in句で指定したオブジェクトのリストに対して繰り返し処理を実行します。
for文自体は、in句で指定したオブジェクトのリストとして評価されるため、以下のようにfor文の戻り値を変数に代入すると、繰り返し処理の対象になったオブジェクトのリストが得られます。
loopメソッド
無限ループを作成できます。
eachメソッド
for文と同様にオブジェクトのリストを対象に繰り返し処理を実行します。
eachメソッドの評価結果も繰り返し処理をしたオブジェクトのリストになります。
Integer#timesメソッド
レシーバに指定された、Integerクラスのオブジェクトの回数分処理を繰り返すメソッド。
Integer#uptoメソッド, Integer#downtoメソッド
ある数字からある数字まで、繰り返しを行うときに使います。
String#uptoメソッド
ある文字列からある文字列まで連続で処理を実行したいときに使用します。
次の文字列は何かという定義は、こちらを参照してください。
小ネタ
文字列を1文字ずつループしたい場合は、splitでArrayにする
以下のように、文字列に対して直接forやeachを使うとエラーになる。
(for文に関しては、内部的にeachメソッドを使っているっぽい)
以下のように、splitメソッドで文字列を1文字ずつに分割してArrayにしてからループする
原因としては、StringクラスがArrayクラスを継承していないためと思われる。
eachメソッドはArrayクラスのメソッドなので、Stringクラスから直接、eachメソッドを呼べない。
裏技的に、以下のようにStringクラスを拡張し、1文字ずつ処理をするメソッドeach_char
を作ってみる。
これで、以下のような記述が可能になる。