これも「コーディング ホラー」というよりは、バグです。
またもや、VB で発見しました。
VB6 以前 (コーディング ホラー)
If obj Is Nothing = False And obj.Value <> "" Then
Call UpdateHoge(obj.Value)
End If
VB の And や Or は、ショートサーキット評価ではありません。
このソースの場合、最初の Nothing の評価の結果に関わらず、次の Value メンバが長さ 0 の文字列かどうかの評価を行います。
ひとことで言えば、最初の Nothing の評価が無意味になります。
つまり、obj が Nothing だった場合は、容赦なく実行時エラー (例外) が発生するということです。
VB6 以前の場合は以下のようにネスト (入れ子) させるか、
VB6 以前 (Not コーディング ホラー)
If Not obj Is Nothing Then
If obj.Value <> "" Then
Call UpdateHoge(obj.Value)
End If
End If
ガード句を使うことになります。(以後の処理が不要な場合)
VB6 以前 (Not コーディング ホラー)
If obj Is Nothing Then
Exit Sub
End If
If obj.Value <> "" Then
Call UpdateHoge(obj.Value)
End If
VB7 (VB2002) 以降では、AndAlso または、OrElse を使うことで、ショートサーキット評価ができるようになりました。
VB.NET 以降 (Not コーディング ホラー)
If Not obj Is Nothing AndAlso obj.Value <> String.Empty Then
Me.UpdateHoge(obj.Value)
End If
私の場合、And や Or は、論理積や論理和などの演算にくらいしか使いません。
VB.NET 以降でも、AndAlso や OrElse を使うことがないくらい、1 行で 1 評価を意識しています。
コーディング ホラー記事へのリンク