SHORT CIRCUIT
プログラムのお話
先日VBのこんなコードに出くわした

Dim colFoo As Collection
 〜
If colFoo Is Nothing Or colFoo.Count = 0 Then
 〜
End If
恐らくこのコードを書いた人はcolFooがNothingだった場合はIf文の中の処理を行いたかったに違いない
残念ながらエラーで落ちることになるのだが
C系の言語で同様の処理を書く場合、後の評価に関わらず結果が同じ場合はその評価をされない
これに関連して評価順序なども有るのだがここでは割愛
何が問題か、ショートサーキット(又はショートカット)という言葉を知らなかった事はどうでも良い
VBにはショートサーキットが無い事を知らなかった事、これはできれば知ってて貰いたかったがこれもまあ良い
問題は今までまともな単体テストが行われていなかったことだ
通常上記のようなコードの単体テストはcolFooがNothingの場合、colFoo.Countが0の場合、colFoo.Countが1以上の場合などでテストを行う
ところがこのコードを書いた人はcolFooがNothingの場合のテストを怠ったのだ
同様のコードがプログラムのあちこちに散乱していたことから、このプログラムは全体的に単体テストが行われていない可能性が高い
こうなるともう正直手におえない
実運用でエラーが出ないことを祈るばかりである


追而書
ちなみにこのコードが書かれているモジュールはFunction内だけでも1000行を超えていた
宣言されていたローカル変数も60以上有った
共に10分の1にしてから出直せと言いたい


追而書の追而書
ショートサーキットとショートカット、検索してみるとショートカットの使用率のほうが高いようだ
ただ、MSDNによるとショートサーキットらしいのでそちらの名称を使用した
また、冒頭リンク先とは全く無関係であることもここに記しておく