while文
繰り返し処理を行う方法として「while」文について確認します。「while」文は指定した条件式が真(true)の間、繰り返し実行します。書式は次のようになっています。
while 条件式 do 実行する処理1 実行する処理2 end
※「do」は省略可能です。
条件式には「if」文の時と同じように「x == 10」や「y > 15」など関係演算子や論理演算子を使った条件式を記述します。この条件式が真(true)となる間は「do」から「end」までに記述された文が上から順に実行されます。そして改めて条件式の判断が行われます。これを条件式が偽(false)になるまで繰り返します。
次のような例で考えてみます。
num = 0 while num < 2 do print("num = ", num) end print("End")
「while」文は条件式が真(true)の間は繰り返し実行されます。実際の実行される流れは次のようになります。
1) 変数「num」に「0」を代入 2) 条件式を評価。変数「num」は2より小さいので繰り返しを実行 3) 変数「num」の値を出力 4) 「end」まで達したので再度「while」文の先頭へ移動 5) 条件式を評価。変数「num」は2より小さいので繰り返しを実行 6) 変数「num」の値を出力 7) (4)から(6)を無限に繰り返し実行
このように「while」文は条件式を評価し、真(true)であれば「end」までの処理を実行し再度条件式の評価へ戻ります。このように条件式が変化しない場合、繰り返し処理は無限に実行されてしまいますので「do」から「end」までの間に条件式が変化するような処理を記述しなければなりません。
では少し変更してみます。
num = 0 while num < 2 do print("num = ", num) num = num + 1 end print("End")
今度は繰り返し処理の中で変数「num」に代入されている値に「1」を加算して再度変数「num」に格納しています。
実際の実行される流れは次のようになります。
1) 変数「num」に「0」を代入 2) 条件式を評価。変数「num」は2より小さいので繰り返しを実行 3) 変数「num」の値を出力 4) 変数「num」に代入されている値を1だけ加算。変数「num」は「1」が代入される 5) 「end」まで達したので再度「while」文の先頭へ移動 6) 条件式を評価。変数「num」は2より小さいので繰り返しを実行 7) 変数「num」の値を出力 8) 変数「num」に代入されている値を1だけ加算。変数「num」は「2」が代入される 9) 「end」まで達したので再度「while」文の先頭へ移動 10) 条件式を評価。変数「num」は2より小さいくない為「while」文を終了 11) 「End」を出力
今度の例では繰り返し処理が1回実行されるたびに変数「num」の値が変化しています。その結果、「while」文の条件式は3回目で偽(false)となるため「while」文は終了します。
今回は数値を順に変化させる例で見てみましたが、無限ループにならないような条件式と実行される処理を記述してあればどのような使い方でも出来ます。(例えばユーザーからのパスワード入力を繰り返し処理の中で行い、条件式でパスワードが一致しているか判断するといった利用などが可能です)。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" num = 0 print(Kconv.tosjis("繰り返し開始¥n")) while num < 5 do print("num = ", num, "¥n") num = num + 1 end print(Kconv.tosjis("繰り返し終了¥n"))
上記のプログラムを「test1-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )