【Ruby入門】while文の使い方 - do whileの代わりになる書き方も解説
Rubyを始めたばかりのプログラミング入門者向けに、while文の基本形や使用方法を、サンプルコードとともに具体的に解説していきます。実際に実行しながら学習を進めていきましょう。
Rubyを始めたばかりのプログラミング入門者向けに、while文の基本形や使用方法を、サンプルコードとともに具体的に解説していきます。実際に実行しながら学習を進めていきましょう。
スキルアップ
2020/12/17 UP
- プログラミング
- SE資格・スキル
- 入門
- Ruby
条件を満たすまで処理を繰り返すことを、ループ処理といいます。どのプログラミング言語にも必ずある命令文であり、プログラムを構築する上で条件分岐と並んで重要なポイントです。
Rubyのループ処理の命令文にはwhile文があります。このwhile文を理解することは、Rubyの学習をすすめる上でとても大切な要素です。テキストやプログラミングスクールに通って勉強することもできますが、Rubyは開発環境の構築が簡単なので、パソコンを所有していれば独学で触りながら学習できます。
今回はRubyを始めたばかりのプログラミング入門者向けに、while文の基本形や使用方法を、サンプルコードとともに具体的に解説していきます。実際に実行しながら学習を進めていきましょう。
Rubyのwhile文とは
while文は条件がtrueの間、処理を繰り返す構文です。
基本的な書き方は以下のような形になります。
while 条件式 do 処理 end
条件式の後ろにあるdoは省略することができます。
それでは実際のサンプルコードを見てみましょう。ここではwhile文の基本形に沿った構文構造をしています。まず変数iに5を代入し、変数iが5以下の間、iの値を出力したあと+1して再び条件式の評価へ戻るループ処理を行なっています。実行すると画面には1から5までの数字が表示されます。
i = 1 while i <= 5 puts i i += 1 end
do whileはない
Rubyにはdo...while文はありません。do...whileとは、C言語などの他のプログラミング言語に実装されているループ処理の一種です。while文が条件式の評価を行なってから繰り返し処理を行なうのに対し、do...while文は繰り返し処理が行なわれたあとに条件式の評価を行ないます。
条件は boolean型にする
boolean型とは、一般的には真偽などのような2つの状態を表すデータ型で、さまざまなプログラミング言語がサポートしています。しかし、Rubyには厳密にはboolean型というデータ型は存在しません。
Rubyでは、真と偽を表すtrue型、false型、値が空であることを表すnil型を合わせて、疑似変数と呼びます。この疑似変数についてtrue、falseを判定することをboolean判定と呼び、条件分岐やループ処理の条件式はboolean判定をもちいて行なっています。
なお、boolean判定にもちいる比較演算子、論理演算子については、詳しくはif文の記述方法と併せて下記のページを参照してください。
Rubyのwhile文の書き方
それでは基本的なwhile文の書き方を理解したところで、実際に動作するサンプルコードを見ながら、さらに具体的なwhile文の記述方法を学んでいきましょう。
while文の基本形
while文は「while 条件式 do 処理 end」で記述します。条件式を評価し、trueである場合、処理を実行して再び条件式の評価へ戻る(ループ)ため、ループ処理と呼ばれます。
改めてwhile文の基本形を見てみましょう。次のサンプルコードでは、変数iが5からスタートし、10以下の間だけ、現在の変数iの値を表示して、変数iに+1する処理を実行し、ループして再び変数iの評価を行なう処理を繰り返します。
i = 5 while i <= 10 puts i i += 1 end
breakでwhileを終了する
breakは記述された時点でループ処理を終了する命令です。ifをもちいて条件式がネスト(入れ子)になっている場合、breakはもっとも内側の処理を停止します。
このサンプルコードでは変数iが5以下の場合、変数iの現在の値を表示し、+1の加算を行ないます。また、処理が終わったあと変数iが5以上になった場合は、breakによってループ処理を終了します。
whileの条件は10以下の間続くようになっていますが、breakによって処理が止まってしまいます。そのため、このサンプルコードの出力は、1,2,3,4のみとなります。
i = 1 while i <= 10 puts i i += 1 if i >= 5 then break end end
nextで次のwhileループへ
nextはその時点で処理を中断し、次のループ処理に移行します。このサンプルでは、変数iが2だった場合、そこで処理を中断してループ処理の先頭へ戻り、次のループ処理を実行します。そのためこのサンプルコードの出力は、1,3,4,5となります。
i = 1 while i <= 5 if i == 2 then i+= 1 next end puts i i += 1 end
loop do で do whileと同じ処理
前項で解説したとおり、Rubyではdo while構文はサポートされていません。同様の処理を行なうには、loop doを使用します。
次のサンプルコードでは、まず変数totalにnumの現在の値を加算します。その結果をifの条件式で評価し、51以上でbreakによってループ処理を終了しています。ifの条件式に合致しない場合、numに1を加算してloop doをendで終了し、最後に変数numの現在の値を表示しています。そのため、このサンプルコードの出力は、10となります
total = 0 num = 1 loop do total += num if total > 50 break end num+=1 end puts num
begin end while で do whileと同じ処理
do whileと同等の処理を行なうには、loop doの他にbegin ~ end whileが使用できます。Rubyの作者であるMatz氏はbegin ~ end while ではなくloop doの使用を推奨していますが、コードとしては実行可能なため現在も使用されています。
次のサンプルコードでは、変数aに10が代入されるまでランダムな値を代入し続け、ループ処理を行なっています。処理を繰り返し、a == 10になった場合、その時点で処理を終了してループ処理を抜けます。
i = 0 begin puts i i += 1 end while i != 10
Ruby のwhile文とfor文の使い分け
ループ処理はwhileだけでなく、for文も存在します。このwhile文とfor文について、使い分けのポイントや書き方の違いを見ていきましょう。
while文のほうがよい場合
while文はループ処理の回数が決まっていない場合に適しています。また、do while は必ず1回は処理を実行したい場合に使用します。
while文は条件式が真(true)の間は繰り返し実行されるため、処理回数は決まっていないが終了させたい条件が決まっている場合に、条件式が偽(false)になるまでループ処理を続けることができます。
次のサンプルコードでは、4回目で偽(false)となるため、while文は3回処理されて終了します。
i = 0 while i < 3 do puts i i += 1 end
for文のほうがよい場合
for文は処理の回数が決まっている場合に適しています。for文ではあらかじめ指定したオブジェクトから要素を全て取り出すと、ループ処理が終了します。
先ほどのwhileと同等の処理をfor文で書くと次のようになります。
for i in 1..3 do puts i end
なお、このサンプルコードにある「1..3」は、範囲オブジェクトと呼ばれています。for文の中で指定されると、最初の値から最後の値までを順に要素として取り出し、処理します。
サンプルを活用してRubyでwhileが書けるようになろう
実際の業務ではループ処理を作成する場合、each文を使用する頻度も高くなりますが、while文も頻繁に使用する構文です。while文は、実際に使用する場合は条件をtrueとするケースが圧倒的に多くなります。
また、記述する際の注意点として、処理が無限ループにならないよう注意しましょう。必ずループ処理の中で条件が「偽(false)」に変化するようにプログラムを記述します。正しいwhile文の記述方法を身に付け、適切な場面で使えるようにマスターしてください。