繰り返し処理(ループ処理)とは
前回は条件分岐をやってみました。今回は処理を繰り返すループ処理というものをやってみます。
ループ処理と言っても「1から100まで数字を出力する」とか「『こんにちは』を100回入力する」というような使い方はあまり行わず、実際には他の処理(例えば後述する配列)と組み合わせて使うことが多いので、条件分岐のように直感的にどのような場面で使うか想像しにくいと思います。なので今回はさらっと書きます(`・ω・′ )
while文(条件付きループ処理)
指定した条件を満たす場合に処理を繰り返すのがwhile文です。
while 条件 do
処理
end
条件がtrue(真)の場合、do〜endの間の処理を実行します。
無限ループに注意!
条件が変わらないと延々と処理が行われますが、これを無限ループと言い、プログラムのバグ(欠陥)となります。例えば次のような処理はバグとなります。延々と「番号は10です」と表示されます(´・ω・`)
bangou=10
while bangou==10 do
puts(“番号は10です”)
end
「==」は両辺が等しいことを示します。「=」は右辺を左辺に代入するという意味ですので注意!
上記のコードは同じ処理を繰り返すのでパソコンやサーバに高負荷がかかり、他人のサーバに負荷をかけてサーバダウンとなれば場合によっては損害賠償モノですので、気をつけて下さい(`・ω・′ )
irb(Interactive Ruby)を使用中に無限ループが発生した場合、Ctrl+c(Macの場合は control+c)を押せば処理を強制終了します。
ちなみにバグがあった場合は取り除く必要がありますが、この作業をデバッグと呼びます。
1から100まで数字を並べてみる
1から10までなら手でもできますが、100や1000といった数字だと大変です。これをRubyではこう書きます。
suuzi=1
while suuzi<=100 do
puts(suuzi)
suuzi=suuzi+1
end
1から100まで表示されます。変数suuziに1を代入し、suuziが100以下という条件を満たすのでsuuziの中身1を表示し、1を加算し変数suuziは2となります。変数suuziが100になるまで処理が繰り返され、101になったときには条件を満たさないので処理を行いません。
ちなみに、変数suuziに数字を1加算するには
suuzi+=1
と表記する方法もあります。また、doは省略できるので、
suuzi=1
while suuzi<=100
puts(suuzi)
suuzi+=1
end
と表記できます(ノ)・ω・(ヾ)
また、条件をtrueとし、do〜end内で条件分岐(if)を使って条件を満たした場合に処理を抜け出す(break)という方法もあります。
suuzi=1
while true
puts(suuzi)
break if suuzi==100
suuzi+=1
end
これも同様になります。ちなみに4行目の「break if suuzi==100」はこのコードと同じです。
if suuzi==100 then
break
end
while文の入れ子構造(ネスト)を作る
if文と同様にwhile文の中にwhile文を入れることもできます。1年〜6年までそれぞれ4組あるとします。
nen=1
while nen<=6 do
kumi=1
while kumi<=4 do
puts(“#{nen}年#{kumi}組”)
kumi+=1
end
nen+=1
end
1年1組から6年4組まで並べて表示されます(・ω・)ノ
for文(指定範囲ループ処理)
whileは条件がtrueとなる場合にループ処理を行いましたが、for文は指定した範囲でループ処理を行います。
for 変数 in 範囲 do
処理
end
for文を使って1から100まで数字を並べる
1から100までは「1..100」で指定します(・ω・)ノ
for suuzi in 1..100 do
puts(suuzi)
end
for文の入れ子で1年1組から6年4組まで表示
for nen in 1..6 do
for kumi in 1..4 do
puts(“#{nen}年#{kumi}組”)
end
end
loopメソッド
無限ループをするメソッド(処理)です(´・ω・`)
無限ループを防ぐために処理を抜け出す(break)コードを条件分岐と組み合わせて使ったりします。doは省略しません。
loop do
puts(“無限ループ”)
end
延々と無限ループされます。止めるにはCtrol+c(Macはcontrol+c)です!
次はカウントを1からはじめ、ループ回数を表示し、カウントが10回目でbreakし、10回目未満であればカウントを1増やしてまたループ、という処理です(ノ)・ω・(ヾ)
count=1
loop do
puts(“#{count}回目のループ”)
break if count==10
count+=1
end
簡単ですね。loopメソッドは以上(`・ω・′ )
timesメソッド(回数指定繰り返し処理)
回数を指定して繰り返し処理を行います。
数値.times do
処理
end
「こんにちは」を5回表示するコードは
5.times do
puts(“こんにちは”)
end
1から10まで数えるコードは、変数countを使うとこんなかんじになります。
count=1
10.times do
puts(count)
count+=1
end
何回目のループかを表示(0,1,2,3,…)させるにはこんな方法もあります。「|」は Shift+¥ キーで入力します。|変数|で定義した変数にはカウント回数が代入されます。
数値.times do |変数|
puts(変数)
end
カウント回数が指定の数値回数分表示されます。これを1から10まで数える方法に応用すると、
10.times do |count|
puts(count+1)
end
count+1 とするのは、プログラムは基本的に0から数えるので、+1で修正する必要があるからです。
他にもeachメソッドがありますが、これは次の配列を理解してからのほうがわかりやすいので後述します。繰り返し処理はひとまずここまで(・ω・)ノ