前段
Twitterでフォローしている方が
データベースのテーブル名、カラム名、一部enumだけでなく画面のテンプレート名で日本語を使用している
と言う話をされていました。
解る解るー、と思って見ていたんですが、ぼくはこれに加えてもう一つ最重要視している**「日本語命名しても良い(むしろ推奨したい)と思うもの」**があります。
2バイト文字の使用について
JavaやC#では、識別子*(クラス名とか、メソッド名とか)*に、**「いわゆる2バイト文字」**を使う事が出来ます。
※いわゆるなんちゃら~と書くのは面倒なので、以降は「日本語を使用できる」と言う表現を使います。
日本語識別子を使うと言う事に対して、条件反射的に拒否反応を示す方も少なくないと思います。
ただ、落ち着いて考えてみると、(少なくとも最近の言語・開発環境に於いては)日本語識別子を使用する事による具体的な弊害と言うのはそんなに無いのかな、と思います。
日本語識別子を使用する事で考えられるデメリット
- IDEのインテリセンスが効かない(訳じゃないけど、使い難い)
- 若しかしたら一部のORマッパーとかが正しく動かない(かも?)
一番大きな要素が前者かなと思います。
インテリセンスって言うとMicrosoft用語ですかね、Eclipseで言うと何ですか、単にコード補完?
多くのIDEで [Ctrl] + [Space]
で使えるあの機能です。
どうしてもあの機能だけはIME変換を想定していないので、日本語識別子を使っていると不便になります。
※何か日本語識別子を使った事でこういうトラブルがあったよ!と言う人がいたら教えてください。
日本語識別子を使用する事で考えられるメリット
- 単純に解り易い
- 英訳を調べたりする手間を省ける
- 無理に英単語にすると名前が長くなり過ぎるのを回避できる
特に、業務システム開発に於いては影響度大だと思います。
法律関係の用語とか、特定業務の専門用語とか、英単語化が不可能ではないにしてもかなり難しいと言う場合が多いと思います。
難しい熟語をムリヤリ英語化した場合の弊害:
法律用語や専門用語をムリヤリ英単語化しようとすると、幾つかの直訳英語を調べてみてそれをくっつけたりして、
だいたいそういう「調べないと出て来ないような単語」ってのは長くて読み難い事が多いし、
そもそも普通の人が普通は知らないような単語だったりして、ソースコードを読んだ人がその英単語を調べると言う手間が発生したりして。
とまぁ、とにかく余計なコストが多く、ハッキリ言って無駄なコストですよね。
日本語識別子を毛嫌いしなくて良いのでは:
一定以上難しい単語を要する場合は素直にローマ字表現とかを使うべきだと思いますし、
もっと言えば、前段に引用した通り、適用範囲を明確にしたうえで日本語識別子を使って良いと思います。
そもそも我々が書いているのはプログラムであって、ネイティブ英語文書ではないですしね。
(勿論、構文が英語系の文法に親和性があるので、素直に英語表現に落とせるならそれが一番良いと思いますが、無理くり英語に当てはめる必要も無いよね、と言う話)
ぼくが日本語識別子を強く推奨する場所
で、前段に戻りますが。
ぼくが日本語識別の使用を推奨したいというのは、テストプログラムです。
(テストクラス、テストメソッドの識別子)
テストメソッドに日本語識別子を使用するメリデメ
メリット:
メリットは前述の通りですが、とにかくテストの実行結果が解り易いと言う事が全てです。
自動テストをやっていると、エラーがあった時にどのテストでエラーになったのかが解り易い事が最も重要だと思います。
この時、テストメソッド名を日本語識別子にしていると非常に解り易くて便利です。
デメリット:
デメリットは特に無いように感じます。
日本語識別子を使用する上で最大のデメリットが、前述した通り**「IDEのコード補完が使い難い」**だと思いますが、テストメソッドに於いてはこれは全く無関係です。
何せ、テストメソッドの呼び出しを書かない*(普通はアノテーション・アトリビュートを目印にしてテストフレームワークがリフレクションで呼び出すので、呼び出しコードを書く事が無い)*のだから、コード補完も何も無いですよね。
余談:
前述の「一部のenum」と言うのが日本語識別子の許容対象になっているのは非常に上手いと思います。
通常、「列挙体名.列挙子名」と言う形で、グループを指定してからその中の要素を示す、と言うコードの字面になるので、IDEで補完が効かなくとも、もともと選択肢がかなり絞られるので、上下キー選択だけでもコーディングに支障が無い部分と言えます。
なので、IME云々と言う弊害がほぼ影響しないので、業務固有のコード定数や区分値等を定義した列挙体に対して、日本語識別子を使用すると言うのは賢いやり方だと思います。
それ以外の部分で、どの程度日本語識別子を許容するかと言うのは、各プロジェクトのアーキテクトが考える所かな、と言う気がします。