不可解なコードに出会うことがあります。(VB6のソースです。)
-------------▼
Private Function abc(ByVal b As Integer) As String
On Error GoTo ER
Dim a As Integer
Dim c As Integer
a = 20
c = a \ b
'(*A)このままERに突入
ER:
If Err.Number <> 0 Then ' Errorの有無判断
Err.Raise Err.Number, , Err.Description
abc = "異常終了" '(*B)
else
abc = "正常終了"
End If
End Function
-------------▲
作成者は、「以前携わったプロジェクトの記述標準書に則ったソースだから行儀はいいはず。」と認識しています。
違和感/疑問を感じないのも問題ですが、記述標準書の在り方にも問題が在りそうです。
問題な基準点(抜粋)
ア:最初にOn Errorを記述し、Error処理は一箇所で行う。
イ:出口は最後の一箇所にする。
ウ:関数の戻り値は正常終了/異常終了の区別を戻す。
例のソースはアイウを満たしてます。 (満たせばいいの?)
(*A) 正常処理されたのに, Errorルーチンに飛び込む.
その中で再度 Err.number<>0で Errorの有無を判定している.
基準イを満たすための実装
(*B)前行で Err.Raiseしているので決して実行されない.
基準ウを満たすための実装.
基準アを設けている基準は時々みかけるので、まぁ良しとしましょう。(文句はあるが)
イとウは必須だとする基準は,基準がバグである。.......と思う....多分...(弱気)
一度確定した記述標準は見直されることは少ないのかな。このまま、.NETの世界に持ち込まれることもあるという。恐ろしや。
コードの行儀云々以前に、開発基準の行儀/モラルの見直しがいりますね。(SE/プロマネの仕事だと思います。)