PR

 プログラミングと言えば,どうしても実質的な処理を行うソースコードが注目される。が,忘れちゃあいけない。「コメント」という地味~な存在のあることを――。ソースを書くのも読むのも人間だ。機械に伝える命令を,人間にも正しく伝えなければいけない。ってことで,コメントについて調査した。

コメントはヒトのためにある

 世の中には,実にたくさんのプログラミング言語がある。記号的な言語,文章のような言語,数式のような言語…それぞれに仕様が異なる。ある言語を習得したからといって,他の言語がすぐにわかるわけではない。

 守備範囲も様々だ。経理などの事務処理に向いた言語は三角関数などの数学的な処理に弱かったり,人工知能向けの言語で販売管理はちょっと無理だったり…。

 当然,使われる命令語や記号類も,微妙に似ていたり,時には同じだったりもするが,基本的には異なっている。ある言語では当たり前のように搭載されている命令が,別の言語には存在していないこともある。

 しかし,どのような言語でも,たとえその書き方は異なっていても,必ず用意されている構文がある。それがコメント(comment)だ。一般に利用されているプログラミング言語で,コメントを記述できない言語はない。

 コメントとは「補足,注釈」のことをいう。ソースコードの一部ではあるが,コンパイラやインタプリタといった「人間に理解できるソースコードを機械語に変換する機構」に無視される,悲しい定めを背負った存在だ。

 ソースコードは機械語に変換されて機械(CPUやOS)への指示となるのが前提だが,コメントは機械に渡されない。コメントを受け取るのは人間である。ソースコードの中でコメントだけが,人間のみに向けられた「コトバ」なのだ。

 コメントには,人間に向けた文章を自由に記述できる。プログラミング言語の大半は英語をベースにした文法体系となっているが,コメントには英語だけでなく日本語でも中国語でもタガログ語でも(フォントが必要だが),あるいは文章になっていないようなでたらめな文字列でさえも書けてしまう。

様々な言語のコメント構文

 どのような言語であれ,ソースコードにコメントを記述する構文があることは共通している。ただし当然のことながら,コメントを示すための記号は言語によって異なる。主な言語のコメント記号をちょいと見ておこう。

 C:“/*”から“*/”で囲んだ範囲
 C++:“//”以降,行末まで(Cの構文も利用可)
 Java:C++と同じ
 Visual Basic(VB):“'”以降,行末まで
 COBOL:“*”以降,行末まで

 “/* ~ */”以外は,コメント記号を記述したらそれ以降の行末(改行)までがすべてコメントとして扱われる,いわゆる「1行コメント」である。ここで言う“1行”とは,改行コードが現れるまでを指す。テキスト・エディタで表示すると複数行にわたって折り返し表示される場合もある。

 “/* ~ */”によるコメントは,コメント開始の“/*”から終端を示す“*/”が現れるまで,間に改行がいくつあっても構わない。

 C,C++,VBのコメントを比較してみよう(リスト1(a)~(c))。何行にもわたるコメントでは,先頭に必ずコメント記号を記述する1行コメントのほうが「そこがコメントである」ことがわかりやすい。

(a)Cのコメント構文
/* 最大値に達したらメッセージを表示して
   無条件に処理を終え,定数_ _ERRORを返す*/
if (NumPages >= _ _MAX) {
  printf("%d件に達したので終了します。\n", NumPages);
  printf("何かキーを押してください。\n");
/* getch関数を使うには"ncurses.h"を取り込み,
gccの-lオプションで,オブジェクト・ファイルに
ライブラリncursesをリンクすること! */
  ans = getch();
  return (_ _ERROR);
}

(b)C++のコメント構文
// 最大値に達したらメッセージを表示して
// 無条件に処理を終え,定数_ _ERRORを返す
if (NumPages >= _ _MAX) {
  message->print("%d件に達したので終了します。\n",
                 NumPages);
  message->print("何かキーを押してください。\n");
// getch関数を使うには"ncurses.h"を取り込み,
// gccの-lオプションで,オブジェクト・ファイルに
// ライブラリncursesをリンクすること。
  ans = getch();
  return (_ _ERROR);
}

(c)VBのコメント構文
' 最大値に達したらメッセージを表示して
' 無条件に処理を終え,定数_ _ERRORを返す
If (intNumPages >= MAX) {
  MessageBox.Show( _
  intNumPages & _
    "件に達したので終了します。", "件数エラー", _
      MessageBoxButtons.OK)
  ' VBではメッセージの表示にMessageBoxクラスの
  ' Showメソッドを用い,ボタンにはMessageBoxButtons
  ' クラスのメンバーを指定する
  Return (_ _ERROR);
}
リスト1●複数行にわたるコメントは,Cの複数行コメント(a)より,C++のコメント(b)やVBのコメント(c)のほうが,見分けが付きやすい