【コラム】スーパーエンジニアの独り言 第11回“ライク・ア・ローリング・ストーン”
みなさん、こんばんは。吉政創成の吉政でございます。
弊社のお客様であるCTC教育サービスが標記コラムを掲載したメールマガジンを発行されました。なお、メールマガジンを申し込みたい方はこちらをご覧ください。
今号の目次は以下の通りです。
■新コース VMware vSphere5:What's New
ITシステム仮想化基盤(ストレージ編)
■セミナー クラウド時代の人材育成最新動向セミナー
■トピック Inst. Tech View ~第13回“プレゼンテーションTIPS ツール編”~
■コラム スーパーエンジニアの独り言
第11回“ライク・ア・ローリング・ストーン”
※メールマガジンの全文をご覧になりたい方は以下をご覧ください。
ctct201205.pdfをダウンロード
なお、標記コラムは以下をご覧ください。
◆◇ 『スーパーエンジニアの独り言 第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節での挙動についてだったのですが、紙面が尽きてしまいました。これは次回のお楽しみに。
以上