Rubyの繰り返しの以下、6つについて
- timesメソッド
- for文
- while文
- until文
- eachメソッド
- loopメソッド
timesメソッド
一定の回数を繰り返す場合に使用する
指定回数を繰り返す
5.times do
puts "timesメソッドの確認です"
end
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
実際は以下のように使用するのだろうか
i = 5
i.times do
puts "timesメソッドの確認です"
end
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
timesメソッドの確認です
do 〜 end は { 〜 } で書き換え可能。
繰り返し回数を知る
ブロックの中で繰り返している回数を知りたい場合は
5.times do |timesCount|
puts "#{timesCount}:timesメソッドの確認です"
end
0:timesメソッドの確認です
1:timesメソッドの確認です
2:timesメソッドの確認です
3:timesメソッドの確認です
4:timesメソッドの確認です
上記の通り始まりは0からになる。
for文
from〜toの指定
timesのように繰り返し回数の指定でなくfrom〜toの値を指定する。
timesと同じことをするには
for i in 0..4 do
puts "#{i}:for文の確認です"
end
0:for文の確認です
1:for文の確認です
2:for文の確認です
3:for文の確認です
4:for文の確認です
do は省略可能
オブジェクトでの繰り返し
animals = ["dog","cat","pig","hippopotamus"]
for animal in animals
puts animal
end
dog
cat
pig
hippopotamus
from〜toの「..」も範囲オブジェクトを作成するものなので同じことみたい
while文
指定した条件が満たされている間は繰り返しを続ける
i = 0
while i < 5
puts "#{i}:while文の確認です"
i += 1
end
0:while文の確認です
1:while文の確認です
2:while文の確認です
3:while文の確認です
4:while文の確認です
for文と違いiの値は勝手に増えないので条件と繰り返したい処理を間違うと無限ループになる。
あまり上記のような使い方はよろしくなく、繰り返し回数などの条件以外で使用した方が良い。
sum = 1
while sum < 100
puts sum
sum += sum
end
puts "合計が#{sum}になりました"
1
2
4
8
16
32
64
合計が128になりました
1行で書く
繰り返しの処理が1行しかない場合は以下のように書き換えられる
sum = 1
sum += sum while sum < 100
puts "合計が#{sum}になりました"
合計が128になりました
処理の後で判定する
最低でも1回処理を実行したい場合の書き方
sum = 100
while sum < 100
puts sum
sum += sum
end
puts "合計が#{sum}になりました"
合計が100になりました
先に判定されるので上記の場合は一度も処理されない。
処理後で判定するには以下のように記述
sum = 100
begin
sum += sum
end while sum < 100
puts "合計が#{sum}になりました"
合計が200になりました
until文
指定した条件が満たされるまで繰り返しを続ける
whileを書き換えると以下のようになる
sum = 1
until sum >= 100
puts sum
sum += sum
end
puts "合計が#{sum}になりました"
1
2
4
8
16
32
64
合計が128になりました
1行で書く
whileと同様に繰り返しの処理が1行しかない場合は以下のように書き換えられる
sum = 1
sum += sum until sum >= 100
puts "合計が#{sum}になりました"
合計が128になりました
処理の後で判定する
whileと同様に最低でも1回処理を実行したい場合の書き方
sum = 100
begin
sum += sum
end until sum >= 100
puts "合計が#{sum}になりました"
合計が200になりました
eachメソッド
主にオブジェクトの集まりに対して繰り返し処理を行う場合に使用される
animals = ["dog","cat","pig","hippopotamus"]
animals.each do |animal|
puts animal
end
dog
cat
pig
hippopotamus
do 〜 end は { 〜 } で書き換え可能。
for文の内部処理はeachメソッドが使用されている為、以下のような書き換えが可能。
(0..4).each do |i|
puts "#{i}:eachメソッドの確認です"
end
0:eachメソッドの確認です
1:eachメソッドの確認です
2:eachメソッドの確認です
3:eachメソッドの確認です
4:eachメソッドの確認です
Prime#each
コメントにてご指摘頂きましたので追記。
指定された整数の値以下の素数を返してくれる。
require 'prime'
Prime.each(31) do |prime|
p prime
end
2
3
5
7
11
13
17
19
23
29
31
loopメソッド
一度呼び出したら後戻りはできない悪魔のメソッド、使用は要注意
loop do
print "すぐにけせ"
end
ターミナルで実行したらcontrol + cが全然効かずmacがウーン言い出して軽く焦りました・・・