- PR -

try-catchもうひとつの使い方

投稿者投稿内容
らぶま
常連さん
会議室デビュー日: 2004/10/21
投稿数: 32
投稿日時: 2005-05-16 01:16
下位モジュールの処理完了を、一種の「割り込み」のような形で上位モジュールに通知する方法かな、という印象を直観的に受けました(「メッセージ」とはちょっと違うような・・)。
catchの中身が割り込みハンドラって感じですか。

勿論、下位モジュールが終了するまで上位モジュールは何もできないので、
効果は薄そうですが・・

いいか悪いかは別として、
発想は面白いと思います。

ただ、テストに関する考察がちょっとな。
普通でやって2秒で出来る処理が、この方法では1分以上かかってしまっては大問題では・・?
実際コアとなる部分に実装すると、到底無視できない時間になると思うけど・・

>mogeさんと被った・・同意見で良かったです。

[ メッセージ編集済み 編集者: らぶま 編集日時 2005-05-16 01:18 ]
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2005-05-16 02:09
まあ、マトモに考えれば「やっちゃいけない事例」の上位に出てきそうなアイデアですね。

でも、これ以外に実装手段がないような例もあります。
以前、スクリプト言語のインタープリタをJavaで実装していた時に、
(1) ループの途中での break
(2) 関数の途中からの return
を実装するのに、Exceptionを使いました。

stacktrace情報を持たない「軽いThorwable」というか、
純粋な「setjmp-longjmp」メカニズムが欲しいと痛感しました。
じじ
会議室デビュー日: 2005/01/04
投稿数: 10
お住まい・勤務地: 大田区
投稿日時: 2005-05-16 13:05
色々考えてみても利点<欠点ではないでしょうか?
やっちゃいけない事としてよくのってますしね

またcoasmさんの
引用:
(1) ループの途中での break
(2) 関数の途中からの return


といった事も
(1) ループにラベルを設定する。
(2) 関数の途中にreturn文書いてしまえばその時点で
  returnされちゃうと思うのですが、、
なのでExceptionを使わず実装できるのではないでしょうか
未記入
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-05-16 20:40
発想は面白いと思いますが、元Cプログラマとしてはifでキャッチすべきかと。
ループ内の強制throwはコストかかりすぎです。
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2005-05-16 21:11
引用:

じじさんの書き込み (2005-05-16 13:05) より:
またcoasmさんの
引用:
(1) ループの途中での break
(2) 関数の途中からの return


といった事も
(1) ループにラベルを設定する。
(2) 関数の途中にreturn文書いてしまえばその時点で
  returnされちゃうと思うのですが、、
なのでExceptionを使わず実装できるのではないでしょうか


これは実装したスクリプト言語の話では?
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2005-05-17 12:38
そうです。スクリプト言語のbreakやreturnを実装する場合の話です。

構文ツリーを解釈実行する際の処理で、たとえば関数途中からの returnだと、
javaのメソッド 呼び出しはこんな感じでネストします。
 (1) 「関数呼び出し」の処理
 (2) 「関数本体」の処理
 (3) 「if文」の処理
 (4) 「thenブロック」の処理
 (5) 「return文」の処理

ここで、(5)から(1)に大域脱出する必要が生じるのですが、
例外のcatch/throw機構を使うのが一番シンプルな実装でしょう。

スキルアップ/キャリアアップ(JOB@IT)