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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、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オンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。