Menu
Coddy logo textTech

例外とは?

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 43/56。

実行時に、ゼロによる除算、"abc" を整数として解析すること、nil に対してメソッドを呼び出すことなど、何かがうまくいかなくなったとき、Rubyは例外を発生させます。プログラムは停止し、Rubyは何がどこで起こったかを出力します。

10 / 0
# ZeroDivisionError: divided by 0

失敗の各種類は、それぞれ独自のクラスになっています。一般的なものをいくつか挙げます:

  • ZeroDivisionError:整数をゼロで除算した場合
  • ArgumentError:メソッドに誤った引数が渡された場合(Integer("abc")
  • NoMethodError: レシーバが持っていないメソッドの呼び出し (nil.upcase)
  • TypeError: 誤った種類のオブジェクトに対する操作 ("a" + 1)

すべての例外クラスには .message があります。これは、例外が処理されないときに Ruby が出力する、人間が読める形式の説明です。次のレッスンでは、プログラムの実行を継続できるように、これらの例外をキャッチする方法を説明します。

challenge icon

チャレンジ

初心者

1行の入力を読み込みます。これはRubyの式名です。それに対してRubyが発生させるであろう例外クラスの名前を出力してください。case文を使用してください(実際に例外を発生させる必要はありません):

  • divide-by-zeroZeroDivisionError
  • nil-methodNoMethodError
  • bad-integerArgumentError
  • wrong-typeTypeError
  • その他 → Unknown

入力がnil-methodの場合、出力はNoMethodErrorとなります。

チートシート

実行時に何らかの問題が発生すると、Rubyは例外を発生させ、プログラムが停止します。一般的な例外クラスは以下の通りです:

  • ZeroDivisionError: 整数をゼロで割った場合
  • ArgumentError: 引数が正しくない場合(例:Integer("abc")
  • NoMethodError: レシーバが持っていないメソッドを呼び出した場合(例:nil.upcase
  • TypeError: 期待されない型のオブジェクトに対して操作を行った場合(例:"a" + 1
10 / 0
# ZeroDivisionError: 0で除算されました

すべての例外オブジェクトは .message を持っており、人間が読める形式の説明が含まれています。

自分で試してみよう

kind = gets.chomp

# TODO: case kind ... 一致する例外クラス名を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン