日本語の関数や変数? 自分しか使わないならむしろオススメ

一般的なプログラミング言語はコードを英字で書きますが、VBAは関数名や変数名に日本語を使うことが出来ます。先に書いてしまいますが、日本語でのコーディングは初心者だけでなくむしろ熟練プログラマーに対してもオススメします。

以下は日本語を使ったコードです。引数文字列を1文字ずつイミディエイトウィンドウに出力する関数です。CallTest関数を実行することで1つ目の日本語の関数を呼び出します。コードを見ると、「引数1文字分」という名前の変数が出力されているので、「ループしながら、なんか1文字ずつ出してんのかな?」とぱっと見ただけでも当たりを付けることができます

このようにVBAでは日本語を使うことは出来ますが、書籍やネットでのVBAのコードで日本語での関数名や変数名を見ることはほとんどありません。

その理由の一番大きい理由は、日本語を理解できない人には伝わらないためです。英語圏の人に日本語のコードを見てもらうのは酷でしょう。また、日本語の変換入力が面倒だったり、文字コードの問題に遭遇する確率が高くなるのも日本語が避けられる理由として挙げられます。

当サイトでも同じ理由で英語を主体でコードを公開しています。

ただ、自分しか使わないようなコードであれば日本語で書くことは避ける必要はありません。むしろ書くことをオススメします

実際に日本語で書いてみると、利点が見えてきます。


日本語コードと英語コードの比較

上の1つ目の日本語の関数を英訳で書き直すと以下のようになります。

さらに、短縮変数名にすると以下のようになります。当サイトのコードはこんな感じですね。

ぱっと見た感じで、コードが少なくなっているのは分かりますが、処理内容の分かりやすさが上がるかというと、あまりそういうことはないと思われます。むしろ日本語のコメントが欲しくなってきます。

少なくとも、日本語のコードのように変数名から1文字出力しているなー、なんてことは一目では分かりません。ある程度コードを追わないとそこまでは理解できないでしょう。


日本語コードの利点

日本語を扱うことの利点は、「母国語だから読み書きに慣れている」という点です。

アラビア語やスワヒリ語のコードを渡されても困りますよね。でもそれを母国語とする人にとっては読みやすいはずです。日本人にとっての日本語も同じです。

そして、漢字とひらがなの組み合わせは文章をすばやく読める、という利点があります。

アルファベットだけの変数や関数を作る場合、複数の単語を組み合わせて名前を付けることが多いですが、GetSystemData()とかget_system_data()のように単語の区切りを大文字やアンダーバーで見やすさを考慮しなければなりません。しかし、漢字とひらがなはそんな書き方をする必要がありません。

プログラミング言語はどうしても英語を母国語として設計されているため、それに合わせる必要がありますが、自分しか使わないコードであれば自分が理解しやすいようにするのは何も問題ありません

変数を日本語で書けばコメントが不要になる

プログラミングのセオリーが書いてある良書として、書籍「リーダブルコード」や書籍「達人プログラマー」などがあります。

これらの良書には必ずと言っていいほど、以下が挙げられています。

  • コメントは適切に書くこと。

「コメントは適切に書く」というのはいろんな書籍で指摘されていることですが、実はこれに対してぴんとこない人がいます。

どういう意味かというと、「コードを見て分かることをいちいちコメントで書くのはやめなさい」、という話ですが、日本人には伝わりにくいのです。それはなぜでしょうか。実は、これは書籍の筆者が英語圏の人であることが関係しています。

以下のような変数宣言があったとします。1つ目と2つ目は日本語のコメントがあると助けになりますが、3つ目の日本語変数「ループカウンタ」に対して「ループカウンタ」というコメントは不要でしょう。書籍で言っているのはこのことです。日本語で書くとすぐに理解できます。

英語圏の場合は英語のコードが当たり前のため、「(英語で書かれた)変数名を見れば分かるから同じことをいちいち(英語の)コメントは書かなくていい」、という趣旨で書いてあるのですが、日本人は「コードは英語」で「コメントは日本語」を書くため書籍の内容が理解しにくいのです。

ところが、変数自体が日本語になると無駄なコメントが省略できるようになります。これは言い換えると、和訳作業が不要もしくは軽減されるということになります。

このように、日本語を使うことでコードの理解がしやすくなる利点があります。仕事で作成するコードの場合は「日本語はダメ」との制約があるかもしれませんが、自分しか使わないマクロであれば日本語でのコードを自由に作成してもよいと思います。