misc.log

日常茶飯事とお仕事と

例外と戻り値

訳わかんなくなってきたので記録。

  • Catchの中でReturnってやると、その場で戻る。
  • CatchのThrowしても、その場で例外として飛ぶ。
Catch ex As CustomException
    Throw ex
    Return -1
Ent Try

この場合、Returnは通らずに、上階層にCustomExceptionを飛ばす。

Catch ex As CustomException
    Return -1
    Throw ex
End Try

この場合、上階層には-1が戻り、例外は隠蔽される。
同様の理由により、下記のコードではReturnを経由せずにCatchに飛んでしまう。

Try
    Throw New CustomException("カスタムエラーですわ。")
    Return "Tryから出ました。"
Catch ex As CustomException
    Return "Catchから出ました。"

Finallyに書かれた処理は、ReturnやEnd Functionが実行される前に必ず実行されるので、安心して「共通片付け」として記述できる。ただし、エラーの場合、オブジェクトが未生成のままFinallyに来ることを想定して、Nothingのチェックを入れておく必要があることに注意。

基本中の基本だけど、最初はみんな迷うから間違わないように。