logo

テクニカルコラム「ライク・ア・ローリング・ストーン」

伊藤忠テクノソリューションズ株式会社(略称:CTC)のグループ会社で、ITシステムの保守サポート、運用サービス及び教育サービスを提供するシーティーシー・テクノロジー株式会社(代表取締役社長:藁谷二郎、本社:東京都千代田区、以下:CTCテクノロジー)はテクニカルコラム「ライク・ア・ローリング・ストーン」を公開しました。

◆◇ 『スーパーエンジニアの独り言 第11回
◆◇ “ライク・ア・ローリング・ストーン”』


先日、筆者周辺でJavaの例外処理の話題がありました。会話の際にすっかり忘れてしまっている事に気がつきました。使わない道具は錆びてしまいますね。今回は、忘却の彼方から記憶を引き戻すためJavaとRubyでの例外処理を比較して眺めてみることにします。

まず記述方法から。Javaの例外処理構文は "try", "catch", "finally" です。

| try {
| // 例外が発生しそうな処理をここに書きます。
| } catch (補足したい例外 e) {
| // 例外が発生した場合の対応ができます。メッセージ出力など。
| } finally {
| // 後片付けなど最後に必ず実行したいこと。
| }

Rubyの例外処理構文は "begin", ("end"), "rescue", "ensure" です。

| begin
| # 例外が発生しそうな処理をここに書きます。
| rescue 補足したい例外 => ex
| # 例外が発生した場合の対応ができます。メッセージ出力など。
| ensure
| # 後片付けなど最後に必ず実行したいこと。
| end

キーワードが違うだけで構文はかなり似ていることが分かります。Rubyではrescue節の後に"else"という「例外が発生しなかった場合の対応」を書くことも出来ます。

Javaで用意されている例外関連のスーパークラスは、Throwableクラスであり、サブクラスとして例外クラスのExceptionがあります。例外としてcatch節で補足するのは、通常Exceptionもしくはそのサブクラスを指定します。

Rubyで用意されている例外関連のスーパークラスは、Exceptionクラスであり、サブクラスとして例外クラスのStandardErrorがあります。例外としてrescue節で補足するのは通常StandardErrorまたはそのサブクラスを指定します。

例外を自分で作ることもできます。JavaはExceptionを継承し例外クラスを作成します。RubyはStandardErrorを継承し例外クラスを自作できます。ライブラリ作成をされる方は、ライブラリ利用者に異常を知らせる手段として自作の例外クラスを送出することで、異常の通知が可能になります。Javaではthrow、Rubyではraiseで例外を送出する記述が出来ます。

また、Javaのcatch節、Rubyのrescue節は、省略することが可能ですが、それでは例外を補足して対処することができませんので、catch(rescue)節を指定し予期される例外に対応するコードを記述するのが得策だと思います。catch(rescue)節は複数指定できます。例外を捕まえましょう。

「転石苔を生ぜず」のことわざ通り、使っていればナイフは錆びないでしょうが、刻々と変化する周囲の状況で同じ道具を使い続けること自体が技術者にとっては困難な時代なのかと思われます。

冒頭の議題は例外処理でのfinally節での挙動についてだったのですが、紙面が尽きてしまいました。これは次回のお楽しみに。

本コラムのバックナンバーは以下をご覧ください。
リンク

本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。