
No.2ベストアンサー
- 回答日時:
>呼び出し元に入れとけば呼び出し先に入れり必要がないと考えておりますが、そうでもないのでしょうか?
そうではないです。
呼び出し元も、呼び出し先も「自分の事しか考えてない」ので、それぞれで、自分の都合に合わせた、以下のような例外への対応が必要です。
・パターンA「必要な例外処理は、自分を呼んでくれた呼び出し元でやってくれている」というのが明白な場合。
呼び出し先では、例外処理を書かなくても良い。例外処理は呼び出し元にすべて任せる。呼び出し先は、呼び出し元の例外処理で何が起きるか、一切関知しない。
・パターンB「必要な例外処理は、自分で処理する必要がある」というのが明白な場合。
呼び出し先では、自分の都合に合わせた例外処理を書く。
但し、自分が対処できない例外は、最初から例外としてキャッチしないか、キャッチした場合は例外を再スローして呼び出し元にすべて任せること。
例えば「例外は、C#のランタイムライブラリがやってくれる例外処理で充分である」と言う場合は、どのルーチンも「必要な例外処理は、自分を呼んでくれた呼び出し元(つまり、ランタイムライブラリのスタートアップルーチン)でやってくれている筈」なのが明白なので、例外処理を一切書かない。
例えば「ゼロ除算だけキャッチして警告を出したい」と言う場合、自分(呼び出し先)の関数内に例外処理を書く。
例えば「呼んだ先でゼロ除算が起きたら呼んだ先で例外処理してくれない」と言う場合、自分(呼び出し元)の関数内に例外処理を書く。
このように「誰に例外処理をさせるか?」により、関数内で例外処理を書いたり書かなかったりする。
これは「呼び出し元で書いてあるから、呼び出し先では要らないよね」という単純な話ではない。
No.3
- 回答日時:
呼出し元の関数では、Aと言う関数、Bと言う関数、Cと言う関数 を呼び出しているものとします。
呼出し元から呼び出された
Aという関数はうまくいき、
Bという関数で例外が発生
Cと言う関数は呼び出されずに
呼出し元は、どの関数で例外が発生したかを調査しない為
結果として処理としては必ず中断するしかありません。
呼出し先の関数で例外処理がされている場合、
Aという関数はうまくいき、
Bという関数で、例外が発生
Bは例外の処理で、戻り値に例外発生時の代替値を返す
Cという関数は、Bの戻り値(この場合、代替値)で処理を行う
結果として、必ずしも呼出し元の関数は中断しなくても良いという結果になる
No.1
- 回答日時:
そういうロジックにするならば、必要があるないという判断は、実装する人で行うべきです。
呼出元で捕捉されるとマズいかどうかは、ロジックを見ないと分かりませんから。
つまり、あなたが見て、あなたが不要だと感じるならば、不要です。
呼出元で捕捉していない例外は、呼出先で捕捉するでしょう。
呼出元で捕捉しているにも関わらず、呼出先で制御を変更させる限定的な例外が存在する場合、その例外は呼出先で捕捉するでしょう。
例外ポリシーをどのように策定して実装しているかで捕捉方法は変わってくるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
Bean→JSPでの文字化け
-
中学のクラス数
-
0歳児の指しゃぶりに関して
-
インスタンス参照でアクセスで...
-
河合塾
-
VBスクリプトでテキストファイ...
-
javascriptからjavaを呼び出したい
-
エクセルVBAで、条件に一致する...
-
進学校通ってたんですけど、眼...
-
canvasで表示されてる画像を1...
-
河合塾のクラス分けについて
-
多人数のじゃんけんプログラム
-
ヒグマを撃退
-
C# 「データが失なわれる可能性...
-
Javaプログラムからポップアッ...
-
オブジェクト参照がオブジェク...
-
フォームのCheck boxとOLEObjec...
-
JavaScriptからJAVAクラスを呼...
-
ブラウザの「更新」を押すと何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
Timestamp型への変換について(J...
-
C#の捕捉されない例外処理の対...
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VBA Evaluate関数 型が一致しま...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
【JAVA】与えられた金額を貨幣...
-
時間の取得
-
文字列からダブルクオートの削除
-
VC++におけるCStringの変換
-
String型の日付(2005/11/25)の...
-
C# マルチスレッドにおける例外...
-
nullで、return出来るのはどん...
-
javaのコンパイルエラーが解決...
-
アロー関数のIE対応にpolyfill...
-
Excelでのエラー
-
サーブレットからJSPの呼び出し...
-
連続する「\\」をひとつの「\\...
おすすめ情報