トークン
ホワイトスペース
プログラミング言語で書かれたコードのうち、これ以上分解できない最小の単位の文字や記号のことをトークン (Token) と呼びます。トークンは英文における英単語のようなもので、どのプログラミング言語においても共通して重要な概念です。
C# で記述されたあらゆるプログラムはトークンに分解することができ、すべてのトークンは以下のいずれかに種別できます。
- 識別子
- キーワード
- 整数リテラル
- 実数リテラル
- 文字リテラル
- リテラル文字列
- 演算子と区切り記号
このうち、前回で識別子とキーワードについては簡単に説明しました。他のトークンについても詳細は後述しますが、リテラルとは 10 や 3.14、または二重引用符で括った文字列など、コード上に直接記載された値のことです。演算子と区切り記号は 5 + 5 などの計算で使う + 記号や、クラス宣言時の中括弧 { } などが該当します。
C# は C/C++ 同様にホワイトスペース (white space) をトークンの区切り文字として用い、トークンの間であれば自由にタブや改行を行うことができます。ホワイトスペースとは、改行やタブ、空白などのことで、厳密には以下の文字と定められています。
- Unicode クラス Zs の文字(空白文字を含む)
- 水平タブ文字(U+0009)
- 垂直タブ文字(U+000B)
- フォームフィード文字(U+000C)
例えば class キーワードとその識別子は class Test と記述しています。これを繋げて classTest とすると、トークンが分離せず classTest 全体で 1 トークンと解釈され、そのようなキーワードは存在しないのでエラーとなります。逆に class と識別子の間に、どれだけ空白があってもトークンには関係ありません。
基本的に何らかの要素の内部にコードを書く場合は、水平タブを挿入してコードの構造関係を読みやすくするよう保ちます。
要素 A { 要素 B { 要素 C { } } }
要素 B は 要素 A のインラインであり、要素 C は 要素 B のインラインです。 これは、多くのプログラミング言語で共通するコーディングのお約束の 1 つです。 もちろんこれを守らなくてもコンパイルできますが、とても汚いソースコードとなり他のプログラマに嫌われます。 次のようなプログラムでも、問題なくコンパイルできるのです。
class Test {static void Main() { System. Console. WriteLine( "Kitty on your lap" ); } }
上記のコードは問題なくコンパイルできますが、見てのとおり無意味に複雑で読みにくいコードとなってしまいます。
ただし、文字列は途中で改行できません。キーワードや識別子の途中でホワイトスペースを入れると、それが区切りだと解釈されるため、例えば Writ eLine() というようなコードを書くとエラーになります。
演算子や区切り記号は、ホワイトスペースと同様に前後のトークンを分離するという効果もあります。例えば、クラス宣言の中括弧の前後は、通常は見やすさを考慮してスペースを挿入しますが、スペースを入れずに詰めることもできます。
class Test{static void Maint(){System.Console.WriteLine("Kitty on your lap");}}
このように、改行やスペースを極力少なくしたコードを書くこともできます。