0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby 様々な繰り返し処理について

Last updated at Posted at 2020-06-24

前置き

Rubyの反復処理についてまとめる。

eachメソッド (配列・ハッシュ)

Rubyでは最も使う反復処理のメソッド。配列・ハッシュに対して便利。

each.rb
fruits = ["apple", "banana", "grape"]
fruits.each{ |fruit| puts fruit }

配列fruitsの要素を、インデックスの若い順から1つずつ取り出して、引数fruitに入れて{}内の処理を実行する。処理が一行だけなので、{}を使っているが、

each_do.rb
numbers = [1, 2, 3, 4, 5]
sum = 0
numbers.each do |number|
  if number % 2 == 0
    sum += number / 2
  else
    sum += number
  end
end
sum #=> 12

複数行の場合は、do endを使うと書きやすい。

timesメソッド(繰り返す回数)

繰り返す回数が決まっている処理に対して便利。

times.rb
sum = 0
10.times { |n| sum += n }
sum #=> 45

upto・downtoメソッド(数値)

初めと終わりの数値が決まっているときに便利。

upto.rb
15.upto(20) do |age|
  if age < 18
    puts "#{age}歳では選挙権はありません"
  else
    puts "#{age}歳は18歳以上なので選挙権があります"
  end
end

uptoは数値を増やす方向に処理を繰り返す。
指定した最初の数値15 から最後の数値20 まで処理を実行。

downto.rb
20.downto(15) do |age|
  if age < 18
    puts "#{age}歳では選挙権はありません"
  else
    puts "#{age}歳は18歳以上なので選挙権があります"
  end
end

downtoは数値を減らす方向に処理を繰り返す。
指定した最初の数値20 から最後の数値15 まで処理を実行。

while文・until文(終了条件)

終了条件が決まっているときに便利

while.rb
array = (1..100).to_a
sum = 0
i = 0
while sum < 1000
  sum += array[i]
  i += 1
end
sum #=> 1035

whileの横にある条件が真の間、while endの間の処理を繰り返す。
上のコードでは、合計値sumが1000を超えたときに処理を終了する。

until文は、while文とは逆で、条件が偽のときに処理を繰り返すので、

until.rb
array = (1..100).to_a
sum = 0
i = 0
until sum >= 1000
  sum += array[i]
  i += 1
end
sum #=> 1035

上のコードは、while.rbと同じ意味になる。

loopメソッド(無限ループ)

while trueでも無限ループを作れるが、loopメソッドを使うとよりシンプルに作れる。

loop.rb
numbers = [1, 2, 3, 4, 5, 6, 7]
loop do
  n = numbers.sample
  puts n
  break if n == 7
end

まとめ

繰り返し処理に使うメソッド・構文は、ケースにあったものを使うと便利。

参考文献

プロを目指す人のためのRuby入門
伊藤淳一 [著]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?