プログラムの制御構造は「順次」「選択」「繰り返し」があります。これらの概念は、プログラムである限り、言語によらず必ず存在しています。もちろん、Rubyにもあります。

Rubyではさまざまな繰り返しの仕組みが用意されています。そこで本記事では、繰り返しについて徹底解説します。

for文、while文、Ruby独特のuntil文

まずはとっつきやすいように、他の言語と近い形式のfor文から解説していきます。

for文の基本

for文の基本パターンです。

for 変数 in オブジェクト do
    // 繰り返したい処理
end

Rubyがオブジェクトの中身を1つづつ取り出して、変数に代入して、オブジェクトの中身を全て処理するまでループを回してくれます。

このパターンにのっとり、1から10までの合計(forバージョン)を算出してみましょう。

sum = 0
for i in 1..10 do
    sum += i
end
print sum

[実行結果]

55

1から10まで足した結果が算出できました。

範囲オブジェクト

ここで1..10ってなんだろう?と思われた方も多いはずです。これは範囲オブジェクトといい、Ruby独特のものです。開始値と終了値を..で結ぶと、範囲オブジェクトとなります。Rubyでは、範囲ですらオブジェクトです。

つまり先ほどのfor文は「for i in 1..10 do」としたので、1から10までの整数を順次取り出し、iに代入して、以降に書かれた「sum += i」を実行する、ということです。

範囲オブジェクトの開始と終了は具体的な数値である必要はなく、変数でも構いません。先の例は以下のように書くことも可能です。

from = 1
to = 10
sum = 0
for i in from..to do
    sum += i
end
print sum

[実行結果]

55

ちなみに、代入部分をこのように書けます。多重代入というので、覚えておくとよいでしょう。もちろん結果は同じ55です。

(from, to, sum) = 1, 10, 0
for i in from..to do
    sum += i
end
print sum

配列をfor文で回す

オブジェクトであれば、基本的にforを回せます。次は配列をfor文を使って回してみましょう。

array = ["a", "b", "c", "d", "e"]
for str in array do
    puts str
end

[実行結果]

a
b
c
d
e

配列の中身をstrという変数で受けて、その内容をputsできました。

ループを回すうちに、条件を満たせば以降を処理せず次のループへ移したいということがあります。そんなときはnextを使います。

array = ["a", "b", "c", "d", "e"]
for str in array do
    if str == "a" || str == "b"
        next
    end    
puts str
end

[実行結果]

c
d
e

aまたはbのときはループを途中で終わらせて次のループへ回しています。よってcから表示された、というわけです。

while文

whileは、他言語の経験がある方はピンとくる書き方です。

while 条件 do
    // 繰り返す処理
end

この書式を使い、1から10までの合計(whileバージョン)を作りましょう。

sum = 0
i = 0
while i <= 10 do
    sum += i
    i+=1
end
print sum

[実行結果]

55

whileを使い、1から10までの合計を算出することができました。

whileとfor文の使い分けはどうすればよいのでしょうか?それは以下のように考えればよいでしょう。

until文

while文は、条件式を満たす間回し続けるループでした。untilはその逆で、条件を満たさない間回し続けるループです。表現を変えると、条件を満たせば終了です。終了条件を記述する、ともいえますね。

until 条件 do
    // 繰り返す処理
end

これを使い、1から10までの合計(untilバージョン)を作りましょう。

i = 0
sum = 0
until i > 10 do
    sum += i
    i += 1 
end
print sum

[実行結果]

55

untilを使ったので、「until i > 10」ということは、iが10まではループが周り、11になったとたんに条件式がtrueとなるので終了する、という動きです。

eachによる繰り返し

Rubyにはeachというメソッドがあります。これはイテレータと呼ばれるメソッドの種類の1つです。

オブジェクト.each do |変数|
    // 繰り返す処理
end

配列の繰り返しを、eachを使って書いてみます。

array = ["a", "b", "c", "d", "e"]
array.each do |str|
    puts str
end

[実行結果]

a
b
c
d
e

arrayの中身を1つづつ取り出してstrに代入し「puts str」を実行できました。

eachについてのもっと詳細な内容は、【Ruby入門】eachメソッドの使い方と応用例をごらんください。

timesによる繰り返し

あらかじめ繰り返す回数が決まっている場合は、timesが使えます。

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

これを使って、5回繰り返してみましょう。

5.times do
    puts '繰り返す処理'
end

[実行結果]

繰り返す処理
繰り返す処理
繰り返す処理

putsを3回繰り返すことができました。

無限ループのloop、終わらせるbreak

loopは、無限ループ(終わらないループ)を作るときに使います。しかし終了条件を記述しないと本当に無限にループしてプログラムが終わりません。よって、loopはbreakと合わせてよく使われます。

これを使い、1から10までの合計(loopバージョン)を作りましょう。

i = 1
sum = 0
loop do
    sum += i
    i += 1
    if i > 10
        break
    end
end
puts sum

[実行結果]

55

loopを使い、1から10までの合計を出すことができました。loop自体は無限ループですが「if i > 10」としたので、iが11に達したときifの中身のbreakが実行されて、ループが止まるという仕掛けです。

まとめ

本記事では、繰り返しを解説しました。

繰り返しの習得は、プログラミングで避けては通れない道です。逆に繰り返しを使いこなすことができれば、とてもスマートなプログラムができます。

開始や終了の条件、繰り返すを内容を変えたりして、いろいろと遊んでみてくださいね!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。