++C++; // 未確認飛行 C MVVMパターンを使ったクロス・ターゲット開発 C#たんと学ぶ わりと硬派なソフトウェア開発講座 番外編「Windows Phone 7」

Top総合 目次C# によるプログラミング入門

[雑記] 識別子名に使える文字

このエントリーをはてなブックマークに追加

目次

キーワード

概要

識別子名」 で説明したように、 変数など、プログラマが自由に名前を付けることの出来るものを識別子(identifier)と呼びます。 識別子の名前は以下のルールでつける必要があります。

  • if や while などの C# のキーワードは利用できない。
  • 先頭の文字は、_ (下線)もしくは letter-character でなければならない。
  • 先頭以外の文字は、letter-character、decimal-digit-character、connecting-character、combining-character、formatting-character のいずれかでなければならない。
  • 変数名の前に @ を付けるとキーワードも識別子名として使用できる。コンパイラには @ は無視される(x という変数と @x は同じものとして扱われる)。
  • 識別子名には Unicode エスケープシーケンス(\xxxx という書式で4桁の Unicode を書いたもの)も利用できる。

ここでは、letter-character とかが何かというのを説明します。

ちなみに、C# に限らず、識別子に Unicode を使える言語では、たいてい同じようなルールを採用しています。

Unicode の文字クラス

C# の識別子に利用可能な文字、letter-character などは、Unicode の文字クラスに基づいて以下のように定められています。

( Unicode では、文字の持つ意味によって各文字をカテゴリーわけしています。 このカテゴリーのことを文字クラスと呼びます。 )

  • letter-character: Lu、Ll、Lt、Lm、Lo、Ml
  • combining-character: Mn、Mc
  • dicimal-digit-character: Nd
  • connecting-character: Pc
  • formatting-character: Cf

まあ、これだけで意味が分かったら苦労しません。 普段からよっぽど Unicode とおつきあいのある人以外には、 こんな文字クラスの記号を見せられても意味が分からないですよね。

ということで、次節以降で簡単な説明をしていきます。

参考

一応、参考までにリンクを2つほど:

識別子の1文字目から使える文字

識別子の1文字目には以下の文字が使えます。

  • letter-character
    • Lu : 大文字。
    • Ll : 小文字。
    • Lt : 見出しにだけ使うような特殊なアルファベット。
    • Lm : 文字修飾子。
      • 日本語でいうと、長音記号とか繰り返し記号(ゝ)とか。
      • 発音記号の長音を表す三角コロン(ː)なんかもこの文字クラス。
    • Lo : その他の文字。大小の区別をもたないような言語の文字は全部この文字クラス。
      • ひらがな、カタカナ、漢字はいずれもこれ。
      • というか、アジア諸国の文字は大概これ。
      • 「ゆ」も「ゅ」も両方 Lo。
    • Nl : letter-character 扱いされる数字。ローマ数字(Ⅰ、Ⅱ、Ⅲ、Ⅳ)とか。

要するに、可読文字なら言語を問わずたいてい利用可能です。

識別子の2文字目以降に使える文字

識別子の2文字目以降では、 letter-character に加えて、 以下の文字が使えます。

  • combining-character
    • Mn : アクセント記号など(â ←この a の上に載ってるような記号)。
      • 他の文字とくっついて、表示上は1文字に見えるもの。
      • 例えば、HTML で「あ゙か゚」って書くことで、あ゙か゚ って表示される。
    • Mc : 他の文字にくっついてしか現れない文字。
      • ಹಾ ← カナダ先住民の文字らしいけど、2文字がくっついて1つになってる。これの2文字目が Mc クラス。
  • connecting-character
    • Pc : 単語をつなぐ文字。アンダーバー(_)とか。
      • a⁀b とか c‿d (tie 記号)とかも。
      • カタカナ中点(・)はこのクラスなので識別子に使える。
  • decimal-digit-character
    • Nd : 数字。算用数字だけじゃなくて、インドとかの数字もこのクラス。
  • formatting-character
    • Cf : 書式指定。 zero width joiner とか left to right mark とか、見た目には表れない文字。

紛らわしい文字

  • 濁点・半濁点
    • 日本語の濁点・半濁点には、半角文字を除いても、 Mn クラスの combining voiced sound mark っていうのと、 Sk クラス(記号扱い)の voiced sound mark っていうのの2つある。
    • IME で「だくてん」の変換で出てくるのは Sk クラスの方なので、識別子には使えない。
    • あ゙か゚ とかは OK(Mn クラスの方の濁点・半濁点は、ほかのひらがな・カタカナと一体化して表示される)。
    • 半角の濁点・半濁点(゙ と ゚)はなぜか Lm クラス。1文字目から識別子に使えたりする・・・。
  • ドット
    • カタカナ中点(・)は Pc クラスなので識別子に使える。
    • ↑ ぱっと見ドットと区別つかないけども、ドット(·)は Po クラス(句読点扱い)で識別子に使えない。
    • 同様に、数学で使うドット演算子(⋅)も Sm クラス(数学記号)で識別子に使えない。
  • コロン
    • 半角のコロン(:)が識別子に使えないのはもちろん、全角のコロン(:)もダメ(Po クラス)。
    • でも、三角コロン(ː)は識別子に使える。 この文字は発音記号の長音に使うものなので、扱いが日本語の長音記号(-)と同じ(Lm クラス)。
  • 長音記号っぽいもの
    • カタカナの長音記号(-)は識別子として使える。
    • 見た目似てるけど、ダッシュ記号(― とか)は識別子に使えない。文の区切りに使うものなので(Pd クラス)。
    • ~ 記号は、wave dash(ダッシュ記号扱い、Pd クラス)も、 fullwidh tilde(全角チルダ、数学記号扱い、Sm クラス)も識別子に使えない。
  • ¥(全角円記号)は Sc クラス(通貨記号扱い)で、識別子利用不可。
おまけ

案外、変な記号も識別子に使えちゃうんで、以下のようなまね可能。 良い子は真似しちゃダメ。

        var ゚あ゙か゚ː・ゝゞヽ⁀ヾ〱‿〲〳〴〵 = 123;

図1: 変な記号

[お問い合わせ](q)