PR

Rubyで繰り返し処理をするメソッドの特徴と書き方まとめ

Ruby・Rails

「Rubyの繰り返し処理を学ぼうと思ったけど、種類が多すぎて覚えきれない」この記事では、そんな悩みを持った方に、実例を挙げて各メソッドの解説をしております。この機会にRubyの繰り返し処理を理解したい方は是非読んでみてください。

Rubyの繰り返し処理のまとめ

プログラミングの勉強を進めていくと、同じことや同じようなことを何度か繰り返したい場合が出てきます。その時に、メソッドを使うことで何度も記述することを避け、可読性もよくすることができます。

プログラミング言語Rubyで繰り返しの処理を行う場合には、for文、while文、until文、eachメソッド、timesメソッド、uptoメソッド、downtoメソッド、loopメソッドの八つの手段があります

while文、until文、each文は似たような形で多言語でも使用する場合があるので、ここで覚えておくと便利です。

それぞれ、メリットデメリットがあるので、多くの選択肢があるのは良いことですが、いきなり、色々な方法があっても、どれを使うべきか戸惑ってしまいます。そこで、今回それぞれの手段を実例を交えて確認し、繰り返し処理の必要性があってもすぐに適切なメソッドを使えるようにしましょう。

Rubyのfor文の書き方

まず、for文の構文の説明をします。以下の構文を覚えておきましょう。

for 変数 in オブジェクト(主に配列) do
繰り返す処理
end

※doは省略して構いません。
それでは、実際にこの構文を使ってみましょう。

writers = ["夏目漱石", "森鴎外", "芥川龍之介"]
for writer in writers
puts writer + "は日本の作家です"
end
夏目漱石は日本の作家です
森鴎外は日本の作家です
芥川龍之介は日本の作家です

このように、各要素を何度もputsすることなく、繰り返し表示をすることができます。
また、Rubyのfor文は応用すると数の繰り返しを行う場合にも便利なものですので、覚えておきましょう。

Rubyのwhile文の書き方

続いて、Rubyのwhile文の説明をいたします。while分は条件がTrueになっている間処理を繰り返します。

while文は非常にシンプルで覚えやすい上に、実践で使う機会も多いです。多言語でも同じような使い方で使用できますので、覚えておきましょう。
while文の基本構文は以下です。

while 条件 do
 繰り返す処理
end

それでは、この構文を利用して、実際に一桁の数字の奇数を表示してみましょう。

i = 1
while i < 10
puts i
i += 2
end

表示結果
1
3
5
7
9

なお、for文の例で使用した配列writersの各要素をwhileを使って表示するためには以下のようにする必要があります。

writers = ["夏目漱石", "森鴎外", "芥川龍之介"]
i = 0
while i < writers.length
puts writers[i] + "は日本の作家です"
i += 1
end

配列writersからi番目の要素を取り出しています。このような例では、eachメソッドの方がわかりやすいので、後述します。

Rubyのuntil文の書き方

次にRubyのuntil文の説明をします。untilは特定の条件が満たされるまで繰り返すメソッドです。

until文はwhileと対になる存在ですので、while文とセットで覚えるとわかりやすいです。
構文は以下です。

until 条件 do
 繰り返す処理
end

whileの構文の「while」部分を「until」に変えただけであることがわかります。
また内容はwhileの条件内容と反対です。
例を見ていきましょう。

i = 1
until i >= 10
puts i
i += 2
end

表示結果
1
3
5
7
9

whileの一つ目の例と比較しましょう。
iの条件はwhileと正反対になっておりますが、表示された結果は同じく1から9までの奇数となっています。

while文の否定をする際に、!を使わずにuntilを使うことで対となる処理結果が可能となりますので、覚えておいてください。

Rubyのeachメソッドの書き方

ここでは、Rubyのeachメソッドの書き方を説明します。文字列の配列をそれぞれ表示する場合に非常に便利です。今後出てくる機会の多いメソッドですので、覚えておきましょう。
構文は以下です。

オブジェクト.each do |変数|
 繰り返す処理
end
もしくは
オブジェクト.each {|変数|
 繰り返す処理
}

それでは、今まで例に出してきたwritersを例にとって考えてみましょう。

writers = ["夏目漱石", "森鴎外", "芥川龍之介"]
writers.each do |writer|
puts writer + "は日本の作家です"
end

表示結果
夏目漱石は日本の作家です
森鴎外は日本の作家です
芥川龍之介は日本の作家です

whileよりわかりやすく、表示ができました。

Rubyのtimesメソッドの書き方

これまで、配列を例に繰り返しの処理を説明してきました。今度は、シンプルに一定の回数同じ処理をさせる場合を説明します。

この場合、Rubyのtimesメソッドを使えば、簡単に処理することができます。
構文は以下です。

繰り返す回数.times do
 繰り返す処理
end

テストの回数を数え、表示してみましょう。

5.times do |i|
i += 1
puts "これは#{i}回目のテストです"
end

表示結果
これは1回目のテストです
これは2回目のテストです
これは3回目のテストです
これは4回目のテストです
これは5回目のテストです

whileの場合と異なり、事前にiに初期値を与える必要がありません。シンプルな繰り返しにはtimesメソッドが最適です。

Rubyのuptoメソッドの書き方

Rubyのuptoメソッドは数値の繰り返しに使うことができるメソッドです。
構文は以下です。

from.upto(to)
 繰り返す処理
end
※fromには始まりの数字、toには終わりの数字が入る。

このメソッドは順番に数え上げる場合に便利です。
ここでは、掛け算の九九の3の段を表示してみます。

1.upto(9) do |i|
puts i*3
end

表示結果
3
6
9
12
15
18
21
24
27

このように、3×1から3×9までを小さい順に表示することができました。

Rubyのdowntoメソッドの書き方

Rubyのdowntoメソッドは数値の数え上げに使うことのできるメソッドです。uptoメソッドとは反対に、fromからtoに達するまで減算しながら、繰り返します。
構文は以下です。

from.downto(to)
 繰り返す処理
end
※fromには始まりの数字、toには終わりの数字が入る。

「upto」が「downto」に変更になった以外はuptoメソッドと同じであることがわかります。
それでは、今度はuptoメソッドの例で使用した九九の三の段を逆から印字してみましょう。

9.downto(1) do |i|
puts i * 3
end

表示結果
27
24
21
18
15
12
9
6
3

uptoメソッドの例で表示した結果とは逆の順番で三の段が表示できています。

Rubyのloopメソッドの書き方

最後にRubyのloopメソッドを紹介します。
loopメソッドは終了条件を持たず、ただ繰り返し処理を行う場合に使えるシンプルなメソッドです。
構文は以下です。

loop do
 繰り返す処理
end

非常にシンプルで覚えやすいですが、一つ大きな問題があります。終了条件を持たないため、もしメソッドをそのまま実行してしまうと繰り返し処理が半永久的に繰り返されてしまいます

そこで、実際にこのメソッドを使う際には、下記実例のようにbreakを使うなどの工夫をしましょう。

i = 3
loop do
puts i
i+=3
if i > 27
break
end
end

表示結果
3
6
9
12
15
18
21
24
27

ここでは、loop内でifで条件定義を付け加え、条件に該当した場合は「break」することで、繰り返し全体を中断させています。

まとめ

ここまで、Rubyで繰り返し処理を行う場合の8つのメソッドを実例を交えて説明してきました。8つもあると全て覚えるのは難しく感じます。しかし、頻度が多いメソッドはeachやwhileなどと限られております。

この機会に、まずは一つづつ実例を考えて処理してみて、自分にとって使いやすいメソッドが何であるのか、考えてみてください。

タイトルとURLをコピーしました