繰り返し処理とは
同じ処理を何回も繰り返すことです
「〇〇回繰り返し処理をやる」「条件を満たすまで処理をする」
みたいな処理を繰り返す処理のことです。
例えばloop,for文などあります。
eachとmapの違い
⚫︎eachは繰り返し処理の時に使います。
⚫︎mapは繰り返し処理の結果を配列にしたい時に使う。
eachの使い方
まずeachの使い方を見ていきましょう。
eachは英語でそれぞれという意味です。
例えば a= [1,2,3]なら配列の中身を先頭から順番に処理が繰り返される。
webアプリでよく使われる処理です。
例えばTwitterのつぶやきなどを取り出してきてブラウザの画面に表示するときに使える。
each構文
オブジェクト.each do |変数|
実行する処理1
実行する処理2
end
scores = [1,2,3]
scores.each do |score|
score*2
end
p scores
[1, 2, 3] と出力
他にも使い方を見ていきます。
eachは配列scoresの各要素の数字を2倍にした結果を出力しています。
scores = [10,20,30,40,50,60]
scores.each do |score|
puts score
end
puts scoreの部分はsとかにしてもokです。
scores.each do |s|
puts s
end
*putsは1回しかない 。eachでscoresに入ったデータを取り出します。
取り出したものをscoreという変数に入れている。
⚫︎出力結果
10
20
30
40
50
60
mapの使い方
scores = [1,2,3]
scores.each do |score|
score*2
end
p scores
[2, 4, 6]と出力
結果として配列scoresの各要素の数字を2倍した結果を配列として出力されています。
2つを比較して
eachとmapを比較すると
eachはただscoresの中の[1,2,3]を出力しているだけですが
mapはresult = 〜の配列として出力しています。
while文とは
While文は繰り返し処理で使うもので、
指定された条件が真(true)である限り、ブロック内のコードを繰り返し実行するためのループ構造です。
while文の使い方
while文の使い方を見ていきます。
a = 0
while(a < 200)
puts a
a = a + 20
end
で実行するとすると
0
20
40
60
80
100
120
140
160
180
と出力。
これはまず a=0
で定義します。
while(a < 200)は200より下の数まで処理がされるということです。
puts a と a + 20で 0 + 20の20を出力させます。
その後、aが20となり a+20 つまり 20 + 20が処理をされて40と出力されます。
その後、aが40となり、 a + 20 が 40 + 20が処理をされて60と出力されます。
これが200より下の数字まで続くわけです。
補足でdoも使えます。
score = 0
while score <100 do
puts "number #{score}"
score = score + 1
end
他にもuntilやloopなど繰り返し処理は色々あるので調べてみてください。
#injectの使い方
injectは注入という意味です。
scoresの合計を繰り返し処理で出力させていきます。
scores = [40,60,80,100,120]
sum=
scores.inject do |result,i|
result + i
end
puts sum
scoresの合計を出します。実行すると
400
になります。
処理の流れとしては、40+ 60で100になって100+80で180になってと
このような流れを繰り返します。
処理の流れを理解するには
デバックでbinding.pryを挟みながらやると繰り返し処理の流れが把握できます。
resultとiを入力しながらcontinueで処理を進めていくとわかりやすいかと思います。
デバックはこちらを参照してみてください。
最後に
繰り返し処理は他にもたくさんあります。
loop until for times などたくさんあるので調べて実装してみてください。
参考資料
補足
投稿日 2021年08月21日のeach文に関する記事と2021年09月12日のwhile文、
2021年10月19日のinjectの記事を合わせた記事です。