コメント不要論の部分、言葉足らずでまとまりを欠いている気がするので、ちょっと補足しておきたい。
言いたいことをまともに書こうとするとコメント関連だけでまた1ページ行っちゃいそうなので、とりあえず覚え書きということで^^;
以下、主にJavaがターゲット。
- コメントが全て全く要らないというわけではない。“適切な”コメントを書くべきだ、という事に異存は無い。
- 適切な変数名やクラス名・メソッド名を付けるのが大変なのと同様、適切なコメントを書くのは大変。けっこう労力(時間)がかかる。
- コメントを書くのは、プログラムをコーディングする能力とは別で、日本語の文章を簡潔に書く能力が必要。
- メソッド本体が1行しか無いようなメソッドでもJavadocコメントが数行になったりする事もある。実装を見ればすぐ分かる場合でも説明文章を苦労して書くのは馬鹿らしい気がする。
- Javaの文法は知っててもJavadocの文法を知らない人が居る。JavadocのHTMLを生成したことのない人はもっと多いと思う。(生成してみるとけっこう感激するよw)
でも共通ライブラリー・ユーティリティーやフレームワークならブラウザーでJavadocが見られると便利かもしれないが、業務プログラム本体がそういう状態になっても、きっと見ない。 - プログラム本体の1ステップ毎に何をしているか書くようなコメントは冗長・無駄。
- コメントもソースレビューの対象になるはず。(コメントが増えればレビューの時間も相応に増えるはず)
- にもかかわらず、工数見積もりでステップ数とやらを根拠にする場合、「コメントを除いた実ステップ数」とかいうのを使うことが多い。つまり工数にコメントを書く分が含まれないと思われる。にもかかわらずコーディング規約で「全メソッドにコメントを書け」とか…。
コメントを付ける位置にも色々あって、ファイルヘッダーやクラスのJavadoc、フィールド・メソッドのJavadoc、メソッドの中身に書くコメント。
必要度が違うだろうから、ひとまとめにして要/不要を言えるわけもなく。
それから、コメントの目的。
「何をしているか」ではなく「何を意図しているか」「何故そうしているか」あるいは分かりづらい注意点・考慮点を書くべき。
ログ出力があるなら、それがコメント代わりにもなる事もある。
冗長なコメントの例…例えば「getDate() //日付取得」というコメントは、特に要らないでしょ。
そして「getPerson() //日付取得」とか「setDate() //日付取得」とか書かれていたら、正気を疑うぜw(メソッド名とコメントの相違は混乱の元)
(そういえば、コメントの内容が間違っててもコンパイルエラーは出せないね)
つまり、プログラミング言語も「言語」だから、何の処理をしているかという事実については、コメントで書かなくても伝えられるはず、という話。
ただ、そういう「文章っぽくなる」のを意図している言語がCOBOL(爆)
なので、英文でなく数学の記号(式)を使った方が簡潔で分かりやすいでしょ(代入を「a=1」と書くのと「MOVE 1 TO a」と書くのとどっちが簡潔か)とか、
でも理論の記号よりも利便性を優先したい(代入に「:=」でなく「=」を使いたい)とか、
コメントから派生して色々な話題が出てきちゃう(苦笑)
ああ、ソースの変更履歴をコメントに残しておくって話もあるなぁ(苦笑)
バージョン管理システム使えよってことで大筋同意だけど。
でも削除した場合って、履歴を探さなければ「昔は有ったという事に気付けない」というジレンマもあるんだよねー。
なので、よほど気力が出ないとやっぱりコメント全般についてまとめる事は出来ない…orz