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
みたいに書くようになってしまいました。むむむ