Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyプログラムを途中で終了させる方法!exit・abort・breakの使い分けを解説

Rubyプログラムを途中で停止させるには、どうすればよいのでしょうか?

通常、プログラムはすべての命令の処理が完了するまで実行されます。あるいは、捕捉されない例外が発生した時点で終了します。

しかし、常時稼働させる必要のないRubyプログラムを書いている場合、何らかの理由でプログラムを意図的に早期終了させたい場面があるかもしれません。

そんなときに活躍するのが exit メソッドです。

このexitメソッドはどのように動作するのでしょうか?

それでは詳しく見ていきましょう!

プログラムを終了させるさまざまな方法

exit を呼び出しても、プログラムはすぐには停止しません。

実際に起こるのは次のことです

Rubyは SystemExit という例外を発生させます。これにより、プログラムの他の部分に後片付け(クリーンアップ処理)の機会が与えられます。

以下のコードを実行すると、その挙動を確認できます

begin
  exit
rescue SystemExit
  p 123
end

このコードでは、終了前に 123 が出力されます。

このクリーンアップ処理をスキップして即座に終了したい場合は、exit! を使います。

例を見てみましょう

begin
  exit!
rescue SystemExit
  p 123
end

今度は、プログラムが終了する前に 123 が出力されないことに注目してください。

また、別のメソッドも用意されています。

それが abort メソッドです。

このメソッドでは、エラーメッセージを指定できます。

次のように使います

abort "ベーコンがもう残っていない"

これは以下のコードと同じ意味になります

warn "ベーコンがもう残っていない!"
exit 1

warn メソッドは、エラーメッセージを標準エラー出力に出力します。

ところで、exit に渡している引数 1 は何を意味しているのでしょうか?

これが次のテーマです!

終了ステータスコードを理解する

プログラムが終了するとき、Rubyに限らずあらゆるプログラムは「終了ステータスコード」を残します。

押さえておきたいポイントは次のとおりです

  • ステータスコードが 0 の場合、プログラムは正常に終了したことを意味します
  • それ以外のステータスコード(0 以外)は、エラーが発生したことを示すために使われます
  • 0以外のステータスコードを返した際の実際の挙動は、実行環境によって異なります

この仕組みは非常に便利です。OSや他のプログラムは、このステータスコードを利用して監視やログ記録、さらには失敗したプログラムの自動再起動などを行えるからです。

Linuxでは echo $? コマンドで、直前に実行したプログラムの終了ステータスを確認できます。

Rubyの話に戻りましょう

exit を呼び出したとき、デフォルトのステータスコードは 0 です。

引数として別のステータスコードを渡すこともできます。

abort を呼び出すとステータスコードが 1 に設定されるのはこのためです。abort メソッドは、エラーの発生を通知するために使われるのです。

ループを抜ける

プログラム全体ではなく、ループだけを止めたい場合は、別の方法を使う必要があります。

そのために使えるのが break キーワードです:

while 1 == 1
  break
end

break はwhileループだけでなく、ブロックの中でも使用できます。

メソッドから抜ける

Rubyのメソッドは、通常、最後の行のコードを実行すると自然に終了します。

もっと早い段階でメソッドを抜けたい場合は…

return キーワードを使用しましょう。

def apples
  return "今日はリンゴを2個食べました"

  "ベーコン"
end

このコードでは、早期の return によって、"ベーコン" の行が実行されることはありません。

おまけ:無限ループを止める

こうしたミスは、誰にでも起こりえます。

カウンターの増加を忘れてしまい、無限ループを作ってしまうこともあるでしょう。

そのような場合は、次のキーの組み合わせを押せばプログラムを強制停止できます:

CTRL+C

まとめ

この記事では、Rubyの exit メソッドと abort メソッド、終了ステータスコードの意味、そして breakreturn によるループ・メソッドからの脱出方法について学びました。

状況に応じて適切な終了方法を選べるようになれば、より堅牢で扱いやすいRubyプログラムを書けるようになります。ぜひ実際のコードで試してみてください。

最後までお読みいただきありがとうございました!🙂

  1. Androidスマホでバックグラウンドアプリを停止する5つの方法【動作改善・バッテリー節約】

    Androidスマートフォンは非常に高性能なデバイスであり、デジタルカメラ、電子書籍リーダー、MP3プレーヤー、電卓、懐中電灯、ラジオなど、多くの機器の役割を1台に集約した革命的な存在です。しかし、それぞれの機能を実現するために多数のアプリが必要となり、スマホには次々とアプリがインストールされていきます。 インストール済みアプリが多いこと自体は、ストレージ容量を増やせばある程度解決できます。本当の問題は、多くのアプリがバックグラウンドで動作し続け、限られたリソースを消費してしまう点にあります。その結果、スマホの動作が遅くなったりフリーズしたり、バッテリーの減りが通常より速くなったりします。これ

  2. PCの不要なプログラムを完全にアンインストールする6つの方法

    整理整頓されたクリーンなPCは、散らかったPCよりも常に快適です。高いパフォーマンスとセキュリティを維持するためには、PCを常に最適な状態に保つことが大切です。不要なプログラムが溜まると動作が重くなり、ハードディスクの容量も圧迫されてしまいます。 そのため、定期的なお掃除は必須ですが、実は簡単な作業ではありません。不要なプログラムをアンインストールしようとしても、痕跡が残ってしまったり、さまざまな理由で削除できないことも少なくありません。 そんなときはどうすればいいのでしょうか?この記事では、不要なプログラムを完全にアンインストールするためのさまざまな方法をご紹介します。 最も一般的で手軽な