CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
先日、筆者周辺で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節での挙動についてだったのですが、紙面が尽きてしまいました。これは次回のお楽しみに。
>> Javaの関連コース一覧
>> Rubyの関連コース一覧
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes