初心者でも安心!Rubyを使ったWhileループの基本と活用法10選

初心者がRubyのWhileループを学ぶための詳細なガイドRuby
この記事は約11分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

こんにちは、皆さん。

初めてプログラミングを学ぶ際、誰もが一度は遭遇するループ処理。

その中でも特に、「Whileループ」はその基本的な概念と柔軟な活用法から初心者にとって非常に重要な存在となります。

この記事では、初心者でも安心して学べるように、「Ruby言語を使ったWhileループ」の基本的な使い方から、具体的なサンプルコードとともに活用法までを詳しく解説します。

この記事を読めば、RubyでのWhileループの使い方を理解し、活用できるようになるでしょう。

●Rubyとは

Rubyは、まつもとゆきひろさんによって開発されたプログラミング言語の一つです。

オブジェクト指向を採用しており、シンプルさと高い生産性を目指した設計がされています。

その結果、コードは非常に読みやすく、初心者でも扱いやすいという特徴があります。

●Whileループとは

Whileループは、特定の条件が満たされている間、一連の命令を繰り返し実行する制御構造の一つです。

この「条件」はプログラム中で変化し、一定の条件が満たされた時点でループが終了します。

○基本的な使い方

Whileループの基本的な構文は次のようになります。

while 条件 do
  処理
end

ここで、’条件’はループが続くかどうかを決定します。

この’条件’が真(true)である間、’処理’は繰り返し実行されます。

●Whileループの詳細な使い方

それでは、具体的なサンプルコードを見ながらWhileループの詳細な使い方を見ていきましょう。

○サンプルコード1:基本的なWhileループ

次のコードは、1から5までの数字を順番に出力する基本的なWhileループの例です。

i = 1
while i <= 5 do
  puts i
  i += 1
end

このコードでは、iが5以下である間、iを出力し、iに1を足しています。

出力結果は「1、2、3、4、5」となります。

○サンプルコード2:条件式を用いたWhileループ

Whileループでは、特定の条件を満たす限り処理が繰り返されます。

これを活用し、ある条件式が真となる間だけ処理を続け、その条件式が偽となった時点でループから抜け出す、というコードを書くことができます。

下記のコードは、1から始めて2倍していき、その値が100を超えるとループが終了するというものです。

value = 1
while value <= 100 do
  puts value
  value *= 2
end

このコードでは、valueの初期値を1に設定し、valueが100以下である限りvalueを出力した後にvalueを2倍にします。

valueが100を超えた時点で、whileの条件式value <= 100が偽となるため、ループは終了します。

出力結果は「1、2、4、8、16、32、64」になります。

○サンプルコード3:カウンターを用いたWhileループ

カウンターを用いたWhileループでは、ループが何回繰り返されたかを数えることができます。

例えば、下記のコードは、カウンターを使って5回だけループを繰り返し、「Hello, world!」を出力します。

count = 0
while count < 5 do
  puts "Hello, world!"
  count += 1
end

このコードでは、countというカウンターを0から始め、countが5未満である間、「Hello, world!」を出力し、カウンターに1を足しています。

出力結果は「Hello, world!」が5回表示されます。

○サンプルコード4:ネストされたWhileループ

ネストとは、「入れ子にする」という意味で、一つのループの中に別のループを入れることを指します。

これを利用すると、より複雑な処理を実現することが可能です。

ネストされたWhileループの例を紹介します。

i = 0
while i < 3 do
  j = 0
  while j < 3 do
    puts "i: #{i}, j: #{j}"
    j += 1
  end
  i += 1
end

このコードでは、iとjの2つのカウンターを使用しています。

外側のループがiについて、内側のループがjについてそれぞれ繰り返し処理を行っています。

結果として、iとjの全ての組み合わせについて「i: #{i}, j: #{j}」が出力されます。

出力結果は「i: 0, j: 0」、「i: 0, j: 1」、「i: 0, j: 2」、「i: 1, j: 0」、「i: 1, j: 1」、「i: 1, j: 2」、「i: 2, j: 0」、「i: 2, j: 1」、「i: 2, j: 2」となります。

●Whileループの応用例

Whileループはそのシンプルな構造から多岐に渡る応用が可能です。

ここでは、より実用的なコードの例として、配列の要素を操作したり、文字列を検索・置換したり、ユーザーの入力を制御したりする方法を紹介します。

○サンプルコード5:配列を用いたWhileループ

Rubyの配列とWhileループを組み合わせることで、配列の全ての要素に対して一定の操作を行うことができます。

次のコードは、配列の全ての要素を順に出力する例です。

items = ['apple', 'banana', 'cherry']
index = 0
while index < items.size do
  puts items[index]
  index += 1
end

このコードでは、itemsという配列に対してindexを使ってアクセスしています。

indexは0から始まり、items.size(配列の要素数)未満である間ループが続きます。

それぞれのループで、items[index]を出力し、indexに1を足しています。

出力結果は「apple」、「banana」、「cherry」となります。

○サンプルコード6:文字列を操作するWhileループ

Rubyでは、文字列も配列と同様に扱うことができます。

そのため、Whileループと組み合わせて文字列の各文字を一つずつ操作することも可能です。

次のコードは、文字列の各文字を大文字に変換する例です。

str = "Hello, world!"
index = 0
while index < str.length do
  str[index] = str[index].upcase
  index += 1
end
puts str

このコードでは、文字列strの各文字に対して、indexを使って順番にアクセスしています。

そして、各文字を大文字に変換し、その結果を再び同じ位置に戻しています。

すべての文字に対する操作が終わった後で、変換後の文字列を出力しています。

出力結果は「HELLO, WORLD!」になります。

○サンプルコード7:ユーザー入力を受け付けるWhileループ

次に、ユーザーからの入力を受け付けてループを制御するコードを見てみましょう。

このコードでは、ユーザーが入力した数値が10未満である限り、ユーザーに再度数値の入力を求めるという動作をします。

input = 0
while input < 10 do
  puts '10以上の数値を入力してください'
  input = gets.to_i
end
puts '入力を受け付けました: ' + input.to_s

このコードでは、inputという変数にユーザーからの入力を保存しています。

初期値は0に設定されています。その後、inputが10未満である限り、ユーザーに数値の入力を求め続けます。

ユーザーが数値を入力すると、その値はgets.to_iによって文字列から整数に変換され、inputに再代入されます。

ユーザーが10以上の数値を入力すると、ループは終了し、「入力を受け付けました:」と入力値を出力します。

○サンプルコード8:無限ループとブレイクステートメント

Whileループは条件が真である限り続行しますが、その条件が常に真となると「無限ループ」と呼ばれる状況が発生します。

しかし、Rubyではbreakステートメントを使用することで、ループの途中でループを終了させることができます。

次のコードは、無限ループからbreakを使って抜け出す例です。

count = 0
while true do
  count += 1
  if count > 10 then
    break
  end
end
puts 'カウント: ' + count.to_s

このコードでは、countを1ずつ増やし続ける無限ループが設定されています。

ただし、countが10より大きくなった時点で、breakが実行され、ループが終了します。

結果的には、「カウント: 11」と出力されます。

無限ループは扱いに注意が必要ですが、正しく用いることで強力なツールとなります。

○サンプルコード9:Nextステートメントを使用したループ

それでは、次にnextステートメントを活用したWhileループを見てみましょう。

nextステートメントは、ループの途中でその後の処理をスキップし、次のループへ進むときに使用します。

この特性を利用して、ある特定の条件下では特定の処理をスキップする、といった制御が可能になります。

num = 0
while num < 10 do
  num += 1
  if num == 5 then
    next
  end
  puts num
end

このコードでは、numという変数を1ずつ増やしながらその値を出力します。

ただし、numが5になった場合にはnextが実行され、その時のループの残りの処理(puts num)がスキップされて次のループへ進むため、出力される数値に5は含まれません。

つまり、このコードを実行すると、”1 2 3 4 6 7 8 9 10″という結果が得られます。

○サンプルコード10:Redoステートメントを使用したループ

次に、Rubyのredoステートメントを使用したWhileループの例を見てみましょう。

redoステートメントは、ループの最初に戻る特性を持っていますが、ループの条件を再評価せず、直接ループの処理を再開します。

これにより、同じループを繰り返し実行することができます。

count = 0
while count < 3 do
  input = gets.to_i
  if input < 10 then
    puts '10以上の数を入力してください'
    redo
  end
  count += 1
end

このコードでは、ユーザーに3回、10以上の数値の入力を求めています。

しかし、ユーザーが10未満の数値を入力した場合、redoが実行されて同じループが再開されるため、最終的にはユーザーから10以上の数値を3回得るまでループが続行されます。

このredoステートメントを用いることで、特定の条件を満たすまでユーザーからの再入力を求める、といった処理が可能になります。

●注意点と対処法

これまでの内容を理解することで、RubyのWhileループを使ったプログラムを書くための基本的な知識と、その活用法を身につけることができました。

しかし、Whileループを使用する際にはいくつかの注意点と対処法を覚えておく必要があります。

まず、最も重要な点は、Whileループが永遠に続かないように注意することです。

つまり、ループ条件が必ずいつかはfalseになるように設定する必要があります。

これを忘れると、ループは無限に続き、プログラムが停止してしまいます。

これを防ぐためには、ループ内部で必ずループ条件に影響を与える変数を更新することが必要です。

次に、nextredoステートメントを使用する際には、これらがループの流れを制御する力を持っていることを念頭に置くことです。

これらのステートメントは、ループの途中で流れを制御し、プログラムの複雑さを増す可能性があります。

適切に使用することでプログラムの制御を強化することができますが、使いすぎるとコードの可読性を低下させ、バグの原因となる可能性もあります。

また、redoステートメントを使用する際には、redoが無限ループを引き起こす可能性があることに注意が必要です。

条件が変更されずに同じループが繰り返されるため、何らかの外部の影響(例えば、ユーザー入力など)がない限り、redoを使ったループは永遠に続く可能性があります。

以上がRubyのWhileループを使用する際の主な注意点と対処法です。

これらを理解し、適切に対処することで、効果的かつ安全なループ処理を書くことができます。

まとめ

RubyのWhileループは、一連の命令を繰り返し実行するための強力なツールです。

これにより、プログラムの様々な部分で反復処理を行うことが可能になります。

この記事では、Whileループの基本的な使用方法から、nextredoなどのステートメントを活用した高度な使用法までを、10の具体的なサンプルコードを通じて解説しました。

また、Whileループを使用する際の注意点と対処法についても触れ、安全かつ効果的にループ処理を書くための知識を提供しました。

この知識を武器に、あなたもプログラミングスキルを一段階上げることができるでしょう。

WhileループはRubyだけでなく、多くのプログラミング言語で共通の概念であり、その理解はプログラミング全般の理解を深めるのに役立ちます。

この記事がRubyにおけるWhileループの理解、そしてプログラミング学習全体の一助となることを願っています。