- 公開日:2017-9-30 最終更新日:2017-9-29
- プロナビTOP / プログラミング初心者向け技術系ノウハウ・まとめ

はじめに
条件判定文はうまく書けるようになりましたか?
条件判定文は、条件分岐だけでなく繰り返し(ループ)にも使われます。
繰り返しも制御構造のひとつであり、まったく同じ処理(またはすこし異なる処理)を繰り返し実行します。
ループを使えば、同じ処理を何度も記述する必要がなく、コードの重複を避けられます。
この記事では、Ruby初心者の方向けに、制御構造のひとつである繰り返し(ループ)について説明していきます。
条件分岐同様、複数の構文があります。
繰り返しとはなにか?
繰り返し(ループ)とは、まったく同じ(またはやや異なる)処理を繰り返し実行することです。
たとえば、ユーザーからの入力を繰り返し受け付けたり、ファイルの終わりまで読み込んだりするなどです。
また、配列をはじめとするコレクションの要素に対して、くり返し同じ処理を実行することもあります。
まずは、while文を使った繰り返しについてみていきましょう。
while文での繰り返し
while文は、多くの言語に存在する基本的な制御構造です。さっそくコードをみてみましょう。
例:
1 2 3 4 5 6 |
num = 5 while num < 1000 num *= 2 puts num end |
この例では、変数numが1000を超えるまで2倍しています。
while文は、条件判定文が真の(成り立っている)間だけ処理を継続します。
最終的に、変数numが1280となった時点で条件判定文が偽となるため、そこでループが終了します。
逆にいえば、条件が偽にならない限りループは終了しませんので、無限ループにならないように条件に注意しましょう。
一般的に、while文の内部で条件となる変数を更新することが多いです。
条件判定は各ループの開始前に行われるため、条件によってはwhile文が一度も実行されないこともあることに注意しましょう。
次は、while文と対をなすuntil文です。
until文での繰り返し
until文は、while文と逆の性質を持っています。
つまり、条件判定文が偽の(成り立っていない)間だけループを継続します。
次の例をみて下さい。
例:
1 2 3 4 5 6 |
num = 1000 until num < 1 num /= 2 puts num end |
この例では、変数numが1より小さくなるまで2分の1にしています。
while文とは条件の意味が逆になっていることに注目して下さい。
基本的にはwhile文を使えば問題ありませんが、until文のほうが条件がわかりやすくなる場合は使ってみましょう。
次は、ブロック構文による繰り返しです。
ブロック構文を使った繰り返し
最後に、ブロック構文を使った繰り返しを学んでいきましょう。
ブロック構文とは、コードの塊(コードブロック)をメソッドに渡す方法のひとつです。まずは、例をみてみましょう。
例:
1 2 |
nums = [1, 2, 3, 4, 5] nums.each { |n| puts n * 2 } |
プログラムでは、配列などのコレクションの要素に対して、順次処理を実行したいことがよくあります。
そのため、配列には「eachメソッド」が用意されています。
”eachメソッド”にはコードブロックを渡します。
コードブロックには配列の要素が順次渡され、要素の数だけループ処理されます。
この例では、配列の要素を2倍してひとつずつ出力しています。
また、ブロック構文はもうひとつの書き方があり、次のようにすることもできます。
例:
1 2 3 4 5 6 7 |
nums = [1, 2, 3, 4, 5] total = 0 nums.each do |n| total += n puts total end |
この例では、配列の要素を順次足し合わせて、合計値を出力しています。
先ほどの構文でも複数行のコードブロックが書けますが、一般的にはこちらの構文が好まれるでしょう。
結果的にはどちらも同じです。
コードブロックが単一行か複数行かで使い分けるとよいでしょう。
なお、コードブロック中の変数(||で囲われた部分)には任意の名前をつけることができます。
まとめ
3種類の繰り返し構文は理解できましたか?
while文やuntil文も重要ですが、最も使用頻度が高いのはブロック構文を使った繰り返しでしょう。
なぜなら、意味的な繰り返しよりも配列などのコレクションの要素をループ処理することが多いからです。
しっかりマスターしておきましょう。