不定期に何度も盛り上がる話題、今日は直訳コメントの必要性について(笑)
→『コードを直訳したコメントは必要なのか?「要る派」と「要らない派のまとめ」【 #社畜ちゃん台詞メーカー 】』
コメントをどこまで付ければいいかということについてはなかなか結論が出ないけれども、「コードを直訳したコメント」はさすがに要らないと思う。
例えばこんなコードは直訳コメントなので、要らないんじゃないか。
// iに1加算する i += 1;
これが以下のようなコメントなら、直訳ではない。
// ループカウンターをインクリメント i += 1;
とは言え、このコードの前後を見てiがループカウンターであることがすぐ分かるのであれば、こういったコメントは不要だろう。
しかし、以下のようなコメントだったら?
// 年齢を増やす i += 1;
これならコメントに意味が出てくる気がする。
しかし この場合は、変数名を何とかしろよって話だよな^^;
// 年齢を増やす age += 1;
こうなると直訳コメントなので、このコメントは要らない気がする。
もうちょっと別の例。
// 猫の身長に入力データを設定する dog.setHeight(inputData);
変数名がcatだったら、直訳コメントになって、不要なコメントだった^^;
あるいは、こんなの。
// 猫の身長に入力データを設定する cat.setWeight(inputData);
これらの場合、コメントが間違っているのか、コードが間違っているのか?
自分の場合、コーディングする前に、どんな処理を行うか考える一環としてコメントに書くことがある。
それに沿ってコーディングしていくので、いわばコメントが実装仕様になっているわけだ。
その観点で言えば、たぶんコードが間違っているんだけど、コードを変えてコメントを変え忘れることもあるわけで、一概には言えないorz
(コメントとコードをまるまるコピペして、片方だけ修正が漏れるってことがよくある…。特にコメントの修正を忘れても、コンパイルエラーにもテスト失敗にもならないから…)
こういうミスを発見するためには直訳コメントであっても意味があるのかもしれない?
あるいは余計なことを考える羽目になるので、やはり直訳コメントは無い方が良い?(コードがミスってれば、テストで発覚するし)
以下のようなコードだったら、コメントにも意味があると思う。
// 値が一番小さいデータを取得(リストは値の昇順でソート済み) Hoge min = list.get(0);
これが、「リストの先頭データを取得」なんていう直訳コメントだったら、意味がないと思うけどねw
結局、「事実(どういう処理か)」はコードを見れば分かるので、それを日本語化した直訳コメントは要らない。
どういう「意図」でそういうコードになっているのか、というのはコードを見ても分からないので、コメントが欲しい。
少なくとも、コメントを書くにも結構な労力がかかるので、コードの1行1行に対して必ずコメントを入れろ、なんてのは全くナンセンスだと思う。
(そういう要求をされると、直訳コメントが増える気がするし)