DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Throwの使い方

  • 題名: Throwの使い方
  • 著者: かなだか
  • 日時: 2006/08/01 16:10:46
  • ID: 16918
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Windows XP sp2 VB.NET2003]
分類:[.NET]

かなだかと申します。よろしくお願いします。
VB.NETに限ったことではないのですが、疑問に思ったので書き込ませていただきます。
現在Throw文を使用して呼び出し元へエラーを返す処理を勉強しています。
今まで「メソッドの戻り値は全てBoolean型とし、エラーの有無を判定しろ」と習ったのですが、単純処理のメソッド等でも、これを守ってきました。

-----金額を求めるメソッド----------------------
Public Function sum() As Boolean
 Try
  ~合計を求める処理
  Return True
 Catch ex As OverflowException
  ~エラー処理
  Return False
 End Try
End Function

Public Readonly Property Price() As Integer
 Get
  Return _price
 End Get
End Property

Private _price As Integer
----------------------------------------------

しかし、これでは呼び出し元で "金額を合計する処理" と "合計値の取得"と2度呼び出し処理を行わなければならないため、無駄の多いように感じてなりません。
しかし、いかに単純な処理でも「絶対にエラーが発生しない」とも言い切れず、結局Boolean型を返しているのですが、Throw文を知って上記のプログラムを下のように変更したのですが、Throw文の使い方としては正しいのでしょうか?
また、呼び出し元への有効なエラー対策などありましたらご教授よろしくお願いします。

------呼び出し元でもTry Catch-----------------
Public Function sum() As Integer
 Try
  ~合計を求める処理
  Return price '合計額を返す
 Catch ex As OverflowException
  ~エラー処理
  Throw ex
 End Try
End Function
---------------------------------------------
  • 題名: Re[1]: Throwの使い方
  • 著者: じゃんぬねっと
  • 日時: 2006/08/01 17:42:44
  • ID: 16922
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
■No16918に返信(かなだかさんの記事)
> Throw文を知って上記のプログラムを下のように変更したのですが、Throw文の使い方としては正しいのでしょうか?

Public Function sum() As Integer
    Try
        Return price
    Catch ex As OverflowException
        'エラー処理
        Throw 'ex <= ex は不要(意味合いが変わる)
    End Try
End Function
■No16922に返信(じゃんぬねっとさんの記事)
> ■No16918に返信(かなだかさんの記事)
>Throw 'ex <= ex は不要(意味合いが変わる)

返信ありがとうございます。
Throw文の詳細を調べてみると、Catch内でのみ使用できるThrowは現状維持で再スローするのに対して、Throw ~~ 文は新たな例外を作成してスローするとありました。
Throw exの場合だと、新たな例外を作成してしまうのですね。
ご指摘ありがとうございました。
  • 題名: Re[3]: Throwの使い方
  • 著者: ded
  • 日時: 2006/08/04 13:34:30
  • ID: 16987
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> Throw exの場合だと、新たな例外を作成してしまうのですね。

その通りで、独自の例外エラーにしたい場合は、
Throw New Exception("hogehogeのためエラー")
とか、
Throw New Exception("hogehogeのためエラー", ex)
とすることがあります。

後者は例外の中に例外の情報を含める方法です。
もちろん独自の例外を作成する場合もあります。
#MSDNのException参照

DOBON.NET | プログラミング道 | プログラミング掲示板