Rubyで無限ループを終了する方法【初心者向け】

初心者向けにRubyで無限ループを終了する方法について解説しています。loopやstepを利用した無限ループの方法を、その終了のしかたも含めて覚えていきましょう。実際にソースコードを書いて説明しています。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

Rubyで無限ループを終了する方法について解説します。

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

無限ループを終了する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

無限ループとは

無限ループとは、eachなどのメソッドのように、何回ループさせるか定かではない場合や、処理を常に実行し続けたい、などの場合に使用する手法です。

無限ループは以下のようなメソッドを使用することで実現ができます。

# loopメソッドを使用した無限ループ
loop do
  # 処理内容
end

# stepを使用した無限ループ
1.step do |i|
  # 処理内容
end

 

無限ループを終了する方法

当然ですが無限ループは、無限に処理を繰り返すため、eachメソッドなどとは違い、自動的に止まる事はありません。

# stepを使用した無限ループ
1.step do |i|
  puts i # 1 2 3 4 .... とターミナルに延々と表示
end

と書いて、ターミナルでこのスクリプトを起動した場合は、常に数字が画面に表示され続ける事になります。

 

無限ループを停止するためには、特定の条件があった場合に `break` を入れるなどで停止をする事ができるようになります。

breakは、ループ処理を終了する、という役割を持っています。

# stepを使用した無限ループ
1.step do |i|
  puts i
  break # breakで終了するため、ターミナルには 1 しか表示されない
end

 

実際に書いてみよう

無限ループで書き込み処理を実行し、特定の条件下でループを終了する、というサンプルコードを作成していきます。

ソースコード

require 'date'

# ログファイルに書き込み準備
file = Date.today.to_s + "_application.log"
# 乱数の準備
random = Random.new()

File.open(file,"w") do |file|
  # loopでの実行
  loop do
    rnd = random.rand(1..1000) # 1~1000の間で乱数を生成
    file << rnd.to_s + "\n" # 乱数を書き込み
    if rnd.modulo(100) == 0 then
      # 乱数が100で割って余りが0だった場合は処理を終了
      break
    end
  end

  # stepでの実行
  1.step do |i|
    rnd = random.rand(1..1000) # 1~1000の間で乱数を生成
    file << rnd.to_s + "\n" # 乱数を書き込み

    if rnd.modulo(100) == 0 then
      # 乱数が100で割って余りが0だった場合は処理を終了
      break
    end

  end
end

実行結果として、ログファイルの作成と、中には乱数が追記されています。

しかし、breakがあるため、100で割った数の余りが0の場合、処理が終了するようになります。

YYYY-MM-DD_application.log

403
215
736
600

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

回答してくれたメンター

中廣 誠

職種: WEBエンジニア

過去の開発実績・業務内容:
一部上場企業にて、WEBアプリケーションの受託開発、自社WEBサービス開発、自社ゲーム開発に従事
現在はフリーで活動し、ECサイト開発/運営、課題を解決するためのシステムコンサルタントなどを実施

趣味など
フリーでの活動を期に沖縄へ移住したので、海でのスキンダイビング、釣りなどを趣味にしています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。