第40回
プログラミングの周辺事項(3)~適切なコメントとは?

コメントの必要性

コメントのまったくないソースをスラスラと読み解ける人は少ないはずです。しかし、ソースコードを記述しているときに逐一コメントを書くのは面倒なものです。プログラマーの仕事は機械への命令を書くことであって、人間への説明は不要だ――そんな意見もあります。そうでしょうか?

コメントは人間のため

仮に人間がその内容を読み取るのに苦労したとしても、「1.機械(CPU)への命令として整然としている」という要件を満たしてさえいればソースをコンパイルして正しく動くプログラムを作ることはできます。逆に、人間が読み取りやすいソースであったとしても、コンパイルするとエラーだらけ、コンパイルはできてもバグだらけ……ということもあり得ます。

では、人間には読みづらくても最後にプログラムとして正しく動けばいいのか?と言えば、決してそうではありません。なぜなら、プログラムは人間が作り、改良していくものだからです。

「2.人間が読み取るときにわかりやすい」という要件を満たすには、前回取り上げたように冗長で判断しやすいシンボル名、字下げ(インデント)による処理構造の明確化など、処理そのものを記述した部分への工夫がもちろん大切です。

そしてさらに、ソースコードだけでは判断しづらい部分に対して「コメント」を添えることが重要になってきます。コメントは人間が読むための『文章』であり、コンパイルの対象とはなりません。

なぜそのように書いたのか?

ときどき、「ソースコードをきちんと、整然と記述していれば、コメントなんて必要ない。ソースコードを読めばわかる」という人がいます。しかし、それは大きな誤解です。よほどの天才でもない限り、「なぜその処理をそのように記述したのか?」を未来永劫、明確に覚えておくことはできません。また、将来にわたってソースの意味を説明できる立場にいるとも限りません。

もちろん
for (i=0; i< num; i++) { ...
といった基本的な構文は、Cプログラマーなら誰にでも理解できます。しかし、『では、なぜ変数numの数だけ繰り返すのか?』ということは、その処理の目的を理解するために前後のソースを読まなければ理解できないでしょう。

そういったことを覚えていられるのは、自分の書いたソースだからです。それも、作ったプログラムの数が「細部まで覚えていられるほど少ないから」にほかなりません。何年も、何十年もかけてたくさんのソースを記述していれば、昔書いたソースの細部など忘れてしまっても不思議ではありません。

時間は自分を他人にする

筆者は最近、1990年代に書いたNECのPC-98シリーズ用のBIOSやビデオメモリを扱うCとアセンブリ言語のソースを読み返す機会があったのですが、コメントがなければ何をしている箇所なのか思い出せない部分がいくつかありました。

前回も紹介しましたが「3日も経てば自分も他人」という言葉は本当です(決して、年齢のせいでボケてきた……という訳ではありません、多分)。

まして、チームで開発するような場合、他者が見てもわかるようなソースであることが必須となります。会社組織では、自分が部署を異動した後でほかの人が自分の書いたソースを受け継いで保守をすることもよくあります。

自分でさえ時が経てば読めなくなるようなソースを、他人が読める訳はありません。『いつ、誰が読んでも理解できる』ソースとすることが重要です。もちろん、前回取り上げた「きれいでわかりやすいソース」が最重要ですが、コメントを付加することでさらにそれを確実なものにできます。