Rubyで繰り返しを行うには構文を使う方法とメソッドを使う方法があります。今回は構文を使った繰り返しを見ていきましょう。
Rubyでは下記の構文が用意されています。
- while文
- until文
- for文
繰り返しで注意することは条件設定です。条件設定を間違うと処理が止まらず無限ループに入ってしまいますので、注意が必要です。
Contents
while文
while文は条件が成り立っている間、繰り返し実行されます。条件式が「true」(真)となっている場合に処理が繰り返し行われ、「false」(偽)となった場合に繰り返しを抜けることができます。
書き方は下のようになります。
1 2 3 |
while 条件 do 繰り返し内容 end |
具体的な実行方法は下記のようになります。また、「do」は省略することもできます。
1 2 3 4 5 |
num = 1 while num < 3 puts "#{num}回目の処理" num += 1 end |
1回目の処理 2回目の処理
このスクリプトではまず、1をnumに代入し2行目で繰り返しの条件を設定します。今回の場合はnumが3より下の場合に「true」となり、処理が繰り返し実行されることになります。
そして4行目でnumに1を足して、その足した値をnumにもう一回代入しています。「num += 1」は「num = num + 1」を簡単な表記にしたものです。
処理の具体的な流れとしては
1周目
- numに1を代入
- 2行目で「1 < 3」⇒「true」となる
- 3行目で現在の「num」の値⇒「1」が出力される
- 4行目でnumに1を追加しnumの値を2にする
- 2行目に戻り、式の評価が行われ「2 < 3」⇒「true」となる
- 3行目で現在の「num」の値⇒「2」が出力される
- 4行目でnumに1を追加しnumの値を3にする
- 2行目に戻り、式の評価が行われ「3 < 3」⇒「false」となる
- 「false」となったので「while文」の繰り返し処理が終了
結果的に2回putsが行われます。
until文
until文は先程の「while文」とは逆で、条件式が成り立っていない「false」(偽)となっている間に繰り返し処理を行ってくれます。条件が成り立った場合に繰り返しから抜けることができます。書き方としては下のような感じです。
1 2 3 |
until 条件 do 繰り返し内容 end |
それでは、実行例をみていきましょう。ちなみにuntil文でも「do」は省略可能です。
1 2 3 4 5 |
num = 1 until num > 2 puts "#{num}回目の処理" num += 1 end |
1回目の処理 2回目の処理
今回も2回だけputsの処理が行われました。今回の場合、3週目の条件判断で「3 > 2」⇒「true」となり条件が成り立つのでループは終了します。
until文は条件式が成り立っていない「false」(偽)ときに処理を繰り返してくれますので基本的な流れは先程のwhile文の例と同じような感じになります。
for文
for文では指定されたオブジェクトの値、要素などを順に1つずつ取り出し、その値などを変数に代入し処理を繰り返してくれます。書き方は下の通りです。
1 2 3 |
for 変数 in オブジェクト do 繰り返し処理 end |
具体的な実行例は下のような感じです。今回は範囲オブジェクト「数値..数値」を使用してみます。また今回も「for文」の「do」は省略することができます。
1 2 3 |
for num in 1..3 puts "#{num}回目の処理" end |
1回目の処理 2回目の処理 3回目の処理
今回は範囲オブジェクトで「1」から「3」の値が順番に取り出され変数「num」に代入し処理が行われることになります。
具体的な処理の流れとしては
1週目
- 範囲オブジェクト「1..3」のうち、1が取り出される
- 1を変数「num」に代入
- 「puts」で現在の「num」の値「1」を文字列と一緒に表示
- 「end」まで来たので最初に戻る
2週目
- 範囲オブジェクト「1..3」のうち、2が取り出される
- 2を変数「num」に代入
- 「puts」で現在の「num」の値「2」を文字列と一緒に表示
- 「end」まで来たので最初に戻る
3週目
- 範囲オブジェクト「1..3」のうち、3が取り出される
- 3を変数「num」に代入
- 「puts」で現在の「num」の値「3」を文字列と一緒に表示
- 「end」まで来たが全ての値を取り出したので繰り返し終了
for文で配列を使う
for文では配列の要素を1つずつ取り出して変数に代入することができます。ちなみにfor文ではeachメソッドが使われていますので、eachメソッドのあるオブジェクトならfor文を使用することができます。
1 2 3 4 |
country = ["Japan", "America", "China", "Korea"] for name in country puts name end |
Japan America China Korea
今回は「country」の要素「”Japan”」から順に取り出されputsで出力されます。「country」の要素は4つあるので4回それぞれ繰り返し「name」に要素を代入しています。
コメントを残す