見出し画像

No. 6 C++で学ぶ最適化ソフトウェア開発: コメントを日本語で書いちゃだめですか・・・

※忙しい人はタイトルと太字部分だけ読めば大体OK

  No. 6も書いていきましょう!今回は,プログラム中に残す「コメント」についてのお話です.


コメントとは?

 基本中の基本ですが,大体どのプログラミング言語にも「コメント」という機能が備わっています.これは,特定の方法でプログラム中にコンパイラが読み飛ばしてくれる自由な文字を残すことができる機能になります.例えばFortran90/95だと「!」の後に書いた文字はコンパイル時にコンパイラに読み飛ばされるので何を書いてもよく,ソースコードを読む人に見える情報になります

real(8):: variable1, array(100)
!この部分は読み飛ばされる
variable1 = 10 …..

C/C++言語だと,「//」の後に書いた文字列がコンパイラに無視されます.また,「/*」と「*/」で挟んだ文字列は複数行に渡っていても無視されます.

int val1{}, array[10]{};
//この部分は読み飛ばされる
val1 = 10;
/*
この間に書いた指示も読み飛ばされる
*/

なんでこんなことするの?と思うかもしれませんが,コメントは開発者にとってのメモになります.高級言語に分類されるプログラミング言語が人間に優しい言語だといっても,あくまでそれは機械語と比べた時の話です.それ単体でわかりやすいかというと,必ずしもそうではありません.ただ,好き勝手にメモを書くとコンパイラがソースコードとした書いたものとメモとして書いたものを区別できず機械語に翻訳できないという問題が出てしまいます.ということで,コンパイル時には無視してもらうメモの書き方の決まりとしてコメントがあるわけですね.

コメントは英語で書くべき?

 さて,筆者の弟(ラスボス)の名言を紹介しましょう.

プログラムのコメントを日本語で書く人は信用できんわ(笑)

こわっ(笑)うちの弟がラスボスキャラであることは自伝小説を読んでくださった方ならご存知かと思うのですが,彼はプログラミングの分野でも優秀な人材です.プログラミングなんて大学4年生から始めたはずですが,その頃からスパコンをバリバリ動かしていました.そして,上の一言になります.
この言葉を聞いてから,筆者はコメントを英語で書くようになったのでした…

というのは半分本当,半分冗談です.というのも,英語で書いた方が効率的な理由が別にあったのです.

 筆者のプログラミング環境は,Linuxというものがベースになっています.これはWindowsのようなOSとは異なる系統のより古いOSで,積極的に日本語対応されてきたかというとそうでもない歴史的な背景があります.筆者はWindows上でLinuxをエミュレーションしてプログラミングをしていたのですが,日本語で書いたメッセージの画面表示ができなかったのです.なので,画面に表示させる文章は自ずと英語で書くことになりました.で,どうせならコメントも英語にした方がスッキリして見やすいかな?と英語でコメントしていたのです.

英語でのコメントはかっこいい!だけど...

 ということで,プログラム中のコメントは基本英語で書くことにした筆者ですが,これはこれで気分の良いものでした.カッコイイし.コメントに限らず,プログラムを実行した際に画面に出てくる情報が整理された英語になっていると,なんだかよくわからない高揚感が湧いてくるのです.なんとなくズレたことをやっている気もするのですが,高揚感がやる気につながるのであれば何の問題もありません.また,そもそも画面出力情報は日本語を受け付けてくれなかったので,ここに他の選択肢はなかったと思っています.
 ではソースコード中のコメントについてどうだったかというと,こちらも同様で色々と英語で書いてあることに満足感を持ち,もっと先に進めたい,のような感情を生み出してプログラミングを進めることができました.

英語で書いたコメント.プログラムを渡された人はひとたまりもないかも...

ただ,コメント本来の役割に照らし合わせると,これは少々奇妙なことのようにも感じます.そもそも,コメントの役割はソースコードの可読性を高めることです.なのに,そのコメントが自分のネイティブ言語でない英語というのは,本来の目的に照らし合わせてもなんかヘンな気もしてきます.

今のプログラミングにおけるコメントのスタイルは?

 さて,いろいろと書いていますが,結局筆者のコメントスタイルがどのようになっているかをお話ししようと思います.最初の方はカッコつけて英語で全部書いていたのですが,それって本来の目的からズレてない?と思い始めたという話までしました.で,現在のスタイルですが,こんな感じになっています:

開発中の最適化ソフトウェアのソースコード画面

基本的なことですが,このソースコードはC++なので,緑の部分がコメントになります.ご覧いただくとわかりますが,大事なアルゴリズムの部分は英語開発メモには日本語も混じるようなスタイルになっています.上の文章を見ると英語コメントを書くのがナンセンスみたいな雰囲気が出てしまっていそうですが,もちろんそんなことはありません.個人的な話ですが,仕事柄いろいろな国の人と関わるので,外国の人たちにコードを渡すことがあるとすればコメントは英語でないと通じないのです.なので,コードで何をやっているかを示すコメントは基本的に英語です.ただ,筆者が開発している都合で残す,いわゆる「開発メモ」的なものには日本語も使うようにしています.画像の「12/27 +1が必要なはず」は,配列のインデックスの帳尻合わせのためのメモですが,これは開発者(筆者)だけが見られれば良いので,効率優先で日本語で書くという選択をしているわけです.
 ちょっと脱線しますが,FortranとC系では配列インデックスの開始位置が異なります.Fortranの配列が1から開始するのに対して,C系は0から始まるのです.なので,Fortranコードを参考にしている以上,この帳尻合わせは必須かつかなり大変な作業になります.
 こんな例もあります:

自分しか読まないのでなんだっけか?とか書いちゃう

はい,自分しか読まないと思い切ると,フランクな表現も出てきます.「なんだっけか?」は人に渡すコードにあまり残したくない表現ですが,自分用だと結構効果的なコメントになったりします.というのも,自分がコメントを書いた時点の記憶とともに焼きつくので,その記憶を辿りやすいのです.今回作っている最適化ソフトウェアのソースコードはすでに2000行を超えており,各関数が何度も呼び出され合うかなり複雑な仕組みになっています.そのような仕組みにおいて,今回のように自由でフランクな日本語コメントを残すことは非常に効果的だと感じています.

さいごに

  さて,プログラムに残すコメントについてざっくりとお話ししてみました.プログラミングを始めてしばらくは全て英語で書いていましたが,最近は開発に必要な自分用メモ用の日本語コメントも残してますよ,という感じですね.コメントの目的は「コードの意図を他人に伝える」と「開発者がコードの仕組みを把握し開発を円滑に進める」に2分できると思います.残すそれぞれの目的に合わせて言語を選択すれば良いと思いますが,とくにプログラミング学習の過程で作成するものは全て日本語で良いと思いますよ.学習スピードや効率を上げることが目的なので,自分の母語で学習の補助線を引いてあげてください.

K. HISAKAWA

いいなと思ったら応援しよう!