標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

例外がエラー戻り値よりも使いにくいシーンの例(説明用)

Go言語は例外がないのでアウトという人が多いわけですが、自分は「例外が取り扱いにくいシーン」というものを経験しているので、その点は実は肯定的なんですよね。

たとえば、コンストラクタで「様々な例外」が発生する時、下手に try の範囲を広げると「予期せぬ場所での例外」まで拾ってしまうので、できればコンストラクタだけを小さく try で囲みたいのです (try の範囲を広げるのであれば System.Exception ではなくて、細かい例外を全部列挙しなければいけない)

しかしながら

Try
    Dim foo = New System.IO.StreamWriter(fname,false,System.Text.Encoding.Default)
Catch ex as Exception
End Try

だと foo が他で参照できなくて困るので、結果として

Dim foo as System.IO.StreamWriter
Try
    foo = New System.IO.StreamWriter(fname,false,System.Text.Encoding.Default)
Catch ex as Exception
End Try

と書かなくてはいけません。でも、これ面倒くさいですよね。結局は

Try
   '*** 事前に書き込むフォルダーが存在するか程度は確認する if 文などは書いておく ***
    Using foo As New System.IO.StreamWriter(fname,false,System.text.Encoding.Default)


    End Using
Catch ex As Exception
    MsgBox(ex.ToString) ' このあたりは本当はもっとちゃんと書いてるので、ツッコミ勘弁
End Try

みたいに書くようになってしまいました。むむむ