if elseのコメントの書き方
プログラミングの話題です。
if〜else構文のコメントを書くときって、みなさんどのように書きますか?
単純 if 文の場合
単純if文の場合は、ブロックの直前に書くことがよくあると思います。
例えば、C系の言語で言うと以下のような書き方です。
// ゼロの場合 if (value == 0) { funcA(); }
たまに、ブロックの中にコメントを置く人も見かけます。
個人的には好きじゃないですが、まぁそんなに目くじら立てて言うほど悪い書き方でもないと思います。
if (value == 0) { // ゼロの場合 funcA(); }
if else の場合
では if else の場合はどうなるかというと、それぞれのブロック内にコメントを置くのが普通だと思います。
ブロックの直前には、if else 全体の説明となるコメントを書いたりします。
(コメントの内容はともかく、位置に注目してください)
// 場合わけ if (value == 0) { // ゼロの場合 funcA(); } else { // そうでない場合 funcB(); }
または、右側の余白を活用して、
// 場合わけ if (value == 0) { // ゼロの場合 funcA(); } else { // そうでない場合 funcB(); }
といった感じです。
ところが
ある現場にいったとき、これをこんな風に書く人が結構いてびっくりしました。
// ゼロの場合 if (value == 0) { funcA(); // そうでない場合 } else { funcB(); }
実際には if else じゃなくて if 〜 else if 〜 else if … って長々と続く形式のコードでした。
つまり、
// ゼロの場合 if (value == 0) { funcA(); // 1の場合 } else if (value == 1) { funcB(); // 2の場合 } else if (value == 2) { funcC(); // 3の場合 } else if (value == 3){ funcD(); }
こんな感じです。
カルチャーショック
初めてこの書き方を見たとき、僕はちょっとしたカルチャーショックを覚えました。
はっきり言ってすごいです。こんなの今まで見たことないです。
ブロックもインデントも無視、修正したりコピーしたりするときにミスを誘発するし、こんな書き方をすることなんて絶対に有り得ないです。
なぜこんな書き方をするのか全然理解できなくて、ずっと疑問に思っていたところ、最近になって有力な一つの仮説にたどり着きました。
それは、彼らはVB系の言語を先に習得した人たちではないか、ということです。
(実際にそうなのかはわかりません)
VBの場合
VBで同じような書き方をすると、次のようになります。
' ゼロの場合 If (value = 0) Then Call FuncA ' 1の場合 ElseIf (value = 1) Then Call FuncB ' 2の場合 ElseIf (value = 2) Then Call FuncC ' 3の場合 ElseIf (value = 3)) Then Call FuncD End If
不思議なことに、ブロックの構文にブレース {} がないためか、C系の言語よりは自然に見えませんか?
それでも、ブロックという観点で考えると、やっぱりおかしい書き方に見えてくるのですが、彼らはそこまで深く考えなかったのか、全く疑問にも思わずに習慣となっていったのでしょう。