プログラムの中の変数名やメソッド名、関数名、クラス名といった識別子には英数字のみを使うことが多いですが、Java言語では漢字や平仮名・片仮名などを使うこともできます。変数名を「年齢」だとかメソッド名を「賞与計算」だとかいう風にすることもできるわけです。
Java言語仕様の中で識別子に使える文字が規定されています。もっとも、使える文字の一覧がこの言語仕様書に示されているわけではなく、実際にはCharacter.isJavaIdentifierStart(int) と Character.isJavaIdentifierPart(int) がtrueを返す(前者が識別子先頭、後者が2文字め以降に対応)文字という風に、Characterクラスに丸投げしています。
どんな文字が使えるのかはAPIリファレンスのCharacterクラスの上記メソッドの説明にざっくり書かれています。簡単にいえば、記号類でなく言語表記のための文字はなんでもいけます。ラテン文字はもちろん、ギリシャ文字、キリル文字、漢字、平仮名、などなど。数字も(2文字め以降は)もちろん大丈夫。
分かりにくいのは記号類です。通貨記号はいいとして、「連結句読点文字」(connecting punctuation character)というあまり一般的と思われない用語が素っ気なく使われています。例として '_' が挙げられていて、これが「連結句読点」かといわれればそんな気もしますが、ほかに何が該当するのかこれで分かる人は少ないのではないでしょうか。ここで意味するところはUnicodeDataでいうカテゴリConnector Punctuation (省略形Pc)に相当するらしく、ほかにはU+203F UNDERTIEなど少数があるようです。
さて、この前ちょっと調べ物をしているとき、これに関連して、興味深いブログ記事をふとしたはずみで見つけました。
Java 6まではJIS X 0208にある中黒(中点)「・」をメソッド名の中に使えていたのに、Java 7になったらコンパイルエラーになった。これはどうしたことだと。
このブログで説明されているところでは、Javaの言語仕様が変わったわけではなく、Unicodeの文字カテゴリの定義で、中黒は上で触れた「Pc」として以前は分類されていたのに、Java 7の対応するUnicodeのバージョンでは「Po」(Other Punctuation)に変更になったと。このため、以前は中黒を識別子に使うことができたのに、Java 7ではできなくなったというのです。このブログ記事は大変丁寧に調査・説明されています。
文字コード表の例示字形に変更がなくても、属性の定義の変更によって、影響があり得るわけですね。
ちなみに、Java 6の文字情報はUnicodeバージョン4.0、Java 7は6.0に基づいています。APIリファレンスのCharacterクラスのところに記載があります。また上記ブログによると、中点のカテゴリがPcからPoに変更されたのはUnicode 4.1だそうです。
コメントする