無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

VB.NETをつつく25−例外処理1。エラー処理はほうれんそうが大事。

前回で例外処理の構文は覚えたと思う。だけど、例外処理を使いこなすのは文法だけ覚えるだけでは不十分で、有効な使い方を学ぶ必要があるんだ。といっても、難解な理屈を書かないからリラックスして読んでね。
例外処理の使い方の基本は勿論エラー処理ピヨ。 エラーに対処するための機能として存在するんだ。だけど、例外処理というものがどうしてエラー処理に必要なのかわからないと思うからそこから説明するピヨ。
例外処理が無い時代のエラー処理は、統一性が無い混沌とした状態だったんだ。具体的に書くと、 関数がエラーを起こした場合マイナス値を返すエラーの内容を表す値を返す、 C言語のように専用の関数でチェックする・・・など色々あったんだ。 これが何故悪いのかというと、統一性が無いので関数ごとにエラー処理の方法を調べなくてはならない、注意がそれて本来の目的から遠ざかる、エラーチェックを簡単に忘れられる、といった多くの問題が生じるからなんだ。古い言葉でボクもあまり聞いたこと無いけど、報告・連絡・相談・のほうれんそうは大事だということなんだね。これが如何に効率が悪く間違いの元なのかは現実世界に例えて考えてみよう。


その会社は業務の連絡方法がバラバラです。ある作業では「問題があったらさ〜〜〜んと馬鹿になって叫んでくれ。」と規定されている。さらに、またある作業では「エラーチェック班が居るからその部署に書類を持っていってくれ。」と規定されている。それだけならまだしも、酷い業務だと「問題が無数に発生する恐れがあるから、問題対応表を見て数値で連絡してくれ。」となっています。
もちろんこの状態では新入社員は混乱するばかりです。「先輩。この作業は馬鹿になったらいいんですか?エラー処理班に書類を持っていくのですか?それとも、問題対応表を調べて数値を部長に報告すればいいのですか?」・・・
一作業ごとに一々訊かれる後輩もたまったものではありません。大半の人はこういいます。「とにかく一作業ごとにググレ」・・・そうなってくれると、業務の大半は問題報告作業を調べることに時間が費やされる事になります。となれば、人間の習性上問題報告作業がおざなりになります。こんな状態で我が社は大丈夫なのでしょうか?
by とあるプログラマの人生相談


この例を読めば如何に非効率的かわかると思うピヨ。だからエラー処理方法を例外処理で統一するのがベストなのだぁ。また例外処理には統一性の他に、エラー情報が詳細になり、無視できないんだ。これほど便利な例外処理を使わない手は無いよね。
あれ?今気づいたけど、今回はコードを書いてないぞ。気持ち悪いからサンプルを書くピヨ。

'例外処理がある時
Imports System
Public Class Program
    Public Sub Foo(ByVal i As Integer)
        If i < 0 Then
            Throw New ArgumentOutOfRangeException("マイナスは許さん!")
        End If
    End Sub

    Public Sub Bar(ByRef str As String)
        If str = Nothing Then
            Throw New ArgumentNullException("ちゃんと指定しろ!")
        ElseIf str.Length = 0 Then
            Throw New ArgumentOutOfRangeException("1文字以上指定しろ!")
        End If
    End Sub
End Class

Module Module1

    Sub Main()
        Dim foo As Program = New Program()
        Dim i As Integer = 10
        Dim str As String = Nothing
        '途中省略
        Try
            foo.Foo(i)
            foo.Bar(str)
        Catch e As ArgumentException
            Console.WriteLine(e.Message)
            Console.WriteLine(e.StackTrace)
        End Try
    End Sub

End Module
'読みやすい。はっはっはっは(^▽^)


'例外処理が無い時
Imports System
Public Class Program
    Public Sub Foo(ByVal i As Integer)
    End Sub

    Public Sub Bar(ByRef str As String)

    End Sub
End Class

Module Module1

    Sub Main()
        Dim foo As Program = New Program()
        Dim i As Integer = 10
        Dim str As String = Nothing
        '途中省略
        If i < 0 Then
            Console.WriteLine("マイナスは許さん!")
        End If
        If str = Nothing Then
            Console.WriteLine("ちゃんと指定しろ!")
        ElseIf str.Length = 0 Then
            Console.WriteLine("1文字以上指定しろ!")
        End If
    End Sub

End Module
'読みづらい・・・σ(´〜`)ξ


これの短いサンプルプログラムを見ても可読性と情報量に差があるピヨ。
ということは実際の業務は数万行以上になるからどれだけ大変か想像できるよね。
思いを胸に今回は終わり。
別窓 | VB.NET | コメント:0 | トラックバック:0 | ∧top | under∨
<<中の人の徒然草43 | 無差別に技術をついばむ鳥 | C++/CLIをつつく25−例外処理1。エラー処理はほうれんそうが大事。>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |