↓↓クリックして頂けると励みになります。
【06 | if】 << 【ホーム】 >> 【08 | for】
Rubyのwhile文は、指定した条件が真の間、繰り返しブロック内の処理を実行するためのループ文です。
Visual Studio Codeで、次の繰り返しのプログラムを作成します。
新規作成 【whiletest1.rb】
# whiletest1.rb puts 'ループに入る前です。' i = 0; while i < 10 do puts 'ここはループの中です。' i += 1 end puts 'ループの外に出ました。'
では、プログラムの内容をみていきましょう。
このプログラムでは、while文という構文を使っています。
while 条件 do end
もし、whileのあと条件に当てはまれば、そのあとのdo~end
の処理が実行されます。
条件が当てはまっているうちは永遠にdo~end
の処理が実行されます。
気をつけなければならないのは、終わらないような条件を入れてしまうと無限ループになってしまうということです。
その場合、プログラムを実行したときに終わることなく永遠に動き続けてしまいます。
もし、気づかず無限ループになってしまってそのまま実行し、プログラムが止まらなくなってしまったら、コントロールボタン(Ctrl)とCボタンを同時に押す(Ctrl+C)とプログラムを強制終了することができます。
では、プログラムの内容を見ていきましょう。
最初の条件は、次のように宣言されています。
i = 0
これは、while文に入る前に宣言し、変数 i
を初期化しています。
i=0
なのでそのままwhile文の中に入ります。
ここで、次の文が実行されます
i += 1
これは、変数 i
に 1
を足すという意味です。
これを、インクリメントといいます。
このプログラムでは、まず i がインクリメントされて、変数 i
の値が1
になります。
その後、またwhile文に入り、インクリメントが繰り返されます。
i の値が10になったらループを抜けます。
出力結果を見てみましょう。
~/Desktop/Programming/RB $ ruby whiletest1.rb ループに入る前です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ここはループの中です。 ループの外に出ました。
もう一つ、違う形のプログラムを見てみましょう。
Visual Studio Codeで以下のプログラムを作成します。
新規作成 【whiletest2.rb】
# whiletest2.rb i = 0 x = 1 while true do if x > 1000000 then break end x *= 2 i += 1 end puts '2の' + i.to_s + '乗' + ' > 1000000'
ここでは、while文の条件にtrueを使っています。
これを使うと、わざと無限ループを作ることができます。
しかし、このままでは終わらないプログラムになってしまいます。
そこで、break
を使います。
このbreak
が読まれた時点で、ループから抜けることができます。
このプログラムでは、if文の条件に当てはまるまでループします。
次の文も見てみましょう。
x *= 2
これは、次の文と同じ意味です。
x = x*2
どちらで書いても同じですが、x *= 2
と書く方が一般的です。
出力結果を見てみます。
~/Desktop/Programming/RB $ ruby whiletest2.rb 2の20乗 > 1000000
もう一つ、プログラムを作成します。
Visual Studio Codeで以下のプログラムを作成してください。
新規作成 【whiletest3.rb】
# whiletest3.rb x = rand(0.1..0.9) puts 'x=' + x.to_s while x < 0.5 do x = rand(0.1..0.9) puts 'x=' + x.to_s end puts 'ループから抜けました。'
0.1から1.0未満の間で数字がランダムに出てきます。
0.5以上になるまで表示が続き、0.5以上になると「ループから抜けました」とプリントされループを抜けます。
なお、出力結果は一例で、ループにいる回数や数字は実行する度に違います。
~/Desktop/Programming/RB $ ruby whiletest3.rb x=0.7802903128041748 ループから抜けました。 ~/Desktop/Programming/RB $ ruby whiletest3.rb x=0.24167179124361138 x=0.5006452544942649 ループから抜けました。
「whiletest3.rb」と同じ出力結果になるようにプログラムを書き換えてみます。
Visual Studio Codeで以下のプログラムを作成します。
新規作成 【whiletest4.rb】
# whiletest4.rb while (x = rand(0.1..0.9)) < 0.5 do puts 'x=' + x.to_s end puts 'ループから抜けました。'
実行結果です。
~/Desktop/Programming/RB $ ruby whiletest4.rb ループから抜けました。 ~/Desktop/Programming/RB $ ruby whiletest4.rb x=0.33705701681315176 x=0.1524316077841541 x=0.4669202734204715 ループから抜けました。
これらの応用で、このような繰り返しのプログラムも書けます。
Visual Studio Codeで以下のプログラムを作成します。
新規作成 【whiletest5.rb】
# whiletest5.rb puts 'ループの中に入ります。' count = 0 while true do if count > 9 then break end puts 'ループの中です:' + count.to_s count += 1 end puts 'ループから抜けました。'
実行結果です。
~/Desktop/Programming/RB $ ruby whiletest5.rb ループの中に入ります。 ループの中です:0 ループの中です:1 ループの中です:2 ループの中です:3 ループの中です:4 ループの中です:5 ループの中です:6 ループの中です:7 ループの中です:8 ループの中です:9 ループから抜けました。
【06 | if】 << 【ホーム】 >> 【08 | for】
↓↓クリックして頂けると励みになります。