kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

ソースの国際化?

与太話です。
最近やっとお仕事でもVisual Studio 2005が使えるようになりました。C#でごそごと書いています。今まで日本語(マルチバイト)の識別子否定派だったのですが、Visual Studio 2005が使えるようになって、少し考えを変えています。
否定派だった最大の理由はIMEのON/OFFがめんどうだったから。IMEをカスタマイズすれば結構いけるかもしれませんが、複数の端末でやるのはね。

過去の開発環境

実は今まで日本語識別子をサポートした開発環境を2,3使ったことがあります。が、IntelliSenceがなく、日本語が使えると言っても、コードの生産性という面ではあまり有用だとは思えませんでした。データベースのカラム名と変数名が一致させることができるという程度でしょうか。私はといえば、まわりに公開するI/Fの部分だけマルチバイトを使い、中の処理は全部ANKという書き方を主体にしていました。
C++ではマルチバイト識別子は使えませんが、使えたとしても、VC 6.0程度のIntelliSenceではちょっと使う気になれません(出てこない方が多かったし)。

今の開発環境

Visual Studio 2005とC#を使うようになって一変します。あまり多く書いていないけれど、まだIntelliSenceの補完が出なかったことはありません。これなら「変換作業が面倒」と思っていた日本語識別子を使ってみようかという気になります。そこで、今日からとりあえず列挙型のメンバに日本語を使ってみることにしました。

でもこれほかの人読める?

作ってふと考えたのですが、これよその国に持って行っても読めるんだろうか?いや、たぶん読めない。

 enum {
   通常 = 1,波線 = 2,...
 }
 int lineType = VisioLineType.通常;
 ...
  lineType =  VisioLineType.波線;

記号としてはことなるものと認識してくれるかもしれないけれど、外国の人が見たら理解できないかもしれない。じゃあ、少なくとも列挙型の部分だけでも参照してもらうのはどうだろう?Visual Studioが進化すれば、ロケールを参照して、適宜変えてくれる?こんな感じ。

  0409\hogehoge.dll 
  0411\hogehoge.dll

  using Myhoge.MyVisioObject;

  //en-USロケールな環境でかく。
  int lineType = VisioLineType.NORMAL;

  //ja-JPロケールな環境でかく。
  int lineType = VisioLineType.通常;
  //もちろん生成すると同じバイナリになる。

IDEはひょっとしたらここまでできるかもしれないけれど、コンパイラはどうなんだろう。伝統的なコンパイラとすると、パーサの前段階のプリプロセッサなどで処理してやらなくてはならないだろうけれど、ここまでやらない…よなぁ。読み込んだときとかに自動的に置き換えると自国語でみえてうれしいかもしれないけれど、ソースのdiffを見るという面では最悪だし。ワールドワイドに公開するようなソースの場合、外部公開の識別子は最大公約数をとって、英語にするしかないか、やっぱ。