public void Func1()
{
string s = null;
…
}
C#、または VB で、上記のようにローカル変数を「とりあえず」初期化しているコードは非常によく見かける。あまつさえ、このようなコーディング作法を推奨している書籍すらある。
このような作法は、はっきり言って不味い。
C/C++ ではポインタを null(0) で初期化するのは当然だ。C/C++ ではポインタを初期化しておかないと、適当にその辺にあるアドレスが入っているので、そのまま使うと、とんでもないアドレスにアクセスする。初期化してようがなかろうが、ポインタに正常なアドレスを渡していなければバグだが、初期化していればバグにすぐ気付く。
ただし、これは C/C++ の話だ(もちろん C/C++ でも無闇に初期化するのはどうかと思うが)。C#、VB なら話が違う。
C# 使いなら誰でも「未割り当てのローカル変数 's' が使用されました」というコンパイラのメッセージを一度は見たことがあるだろう。コンパイラは進化してここまで教えてくれるようになった。VB ならば、なんとコンパイルする前にエディタが教えてくれる(でもコンパイルはできる)。だったら意味のない初期化は全く必要ない。
このコンパイルエラーを無くす目的のためだけに初期化してはいけない。これでは、折角見えた落とし穴の上に新聞紙を置いているだけに過ぎない。落とし穴を見つけたら必ず土で埋めるようにしよう。そもそも、未割り当てのローカル変数を使おうとしているのは、ロジックにミスがあるという事なのだから。