重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

例外の再生成のことで質問があります。

Delphi の Ini ファイルを操作するクラス TCustomIniFile には、
ReadDate や ReadFloat といったメソッドがありますが、
このメソッドのソースコードを拝見すると、例外処理を行っている部分で
EConvertError 例外以外の時は else 節の raise で同じ例外を再生成しているのですが、
この else 節は無くても同じ気がするのですが、どうしてわざわざ else 節で
キャッチした例外を再生成しているのでしょうか?
EConvertError 例外以外は例外処理しなければそのままメソッド呼び出し元に伝わりますが、
あえて raise で再生成していることに何か意図はあるのでしょうか?

以下は ReadFloat メソッドのソースコードです。
1 と 2 の部分がなくても結果は同じではないのでしょうか?

function TCustomIniFile.ReadFloat(const Section, Name: string; Default: Double): Double;
var
 FloatStr: string;
begin
 FloatStr := ReadString(Section, Name, '');
 Result := Default;
 if FloatStr <> '' then
 try
  Result := StrToFloat(FloatStr);
 except
  on EConvertError do
   // Ignore EConvertError exceptions
  else ←―――――――――――――― 1
   raise; ←―――――――――――――― 2
 end;
end;

A 回答 (1件)

あまりお勧めできないコーディングスタイルだけど


(elseは処理する必要が無い例外までトラップしちゃうから、
不用意に握りつぶしちゃう危険性がある)

デバッグ時に、ステップ実行する際、トラップしていない例外が発生しても、
プロシージャの外に出ないで2のとこで止まるって利点があります。

しかし、前述したように、おすすめしません。

あぁ、Delphi懐かしいなぁ。
    • good
    • 0
この回答へのお礼

回答どうもありがとうございます。
特別な理由がない限りelseは書かないほうがいいみたいですね。
処理する必要のない例外は何もしないようにすることにします。

お礼日時:2012/01/15 22:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!