僕の携帯電話に,彼女の名前が光っている。少し体温が上昇したことを感じながら,彼女からのメールを開いた。そこには想像した通り,意味不明な数字が並んでいた。普通のメールではなくてガッカリした半面,何より彼女からメールが来たことがうれしかった。僕はすぐにでもこれを解いて彼女の言葉を知りたい衝動に駆られた。

 しかし,焦って物事を進めると大抵はうまく行かない。いつものようにRubyについて思いをはせながら冷静になろう。今回は,Rubyの例外処理について考えてみよう。

例外処理はbeginとrescueを利用する

 そもそも例外処理とは何なのだろうか。例外は,プログラム実行中に発生したエラーを処理する機能のことだ。多くの言語が例外処理機能を備えているので,ロバスト(堅牢)なコードを書くために,ぜひとも有効に使いたいものである。

 そこで今回はまず,例外処理の基本を見ていこう。リスト1のコードを見てほしい。「begin」から「rescue」までが一つの固まりだ。beginに続けて「1/0」とある。これはわざとエラーを起こすために,0除算をしている(Rubyでは,分母に0を入れるとエラーになる)。

begin
  1/0           #-> 0除算
  puts "OK!"
rescue
  puts "ERROR!"
end
リスト1●例外処理の手順を確認するプログラム

 1/0でエラーが起きると,すぐ後ろの「OK!」や「ERROR!」の表示はどうなるのだろう? 実際にリスト1を実行すると「OK!」は表示されず,「ERROR!」だけが表示される。

 今度は,エラーを起こさないように「1/0」をコメントアウトして実行してみよう。すると「ERROR!」は表示されず,「OK!」が表示される。

 このように「1/0」でエラーが起きたときには,「OK!」を表示する処理までたどり着かずに,rescueブロックの処理に移っている。つまり,例外処理は,エラーがあった場合はそこで処理を止めて,rescueからendまでを実行する仕組みだ。