WisdomSoft - for your serial experiences.

トークン

プログラミング言語において「単語」に相当する、これ以上分解できない最小単位をトークンと呼びます。C# のトークンとホワイトスペースについて説明します。

ホワイトスペース

プログラミング言語で書かれたコードのうち、これ以上分解できない最小の単位の文字や記号のことをトークン (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 つです。 もちろんこれを守らなくてもコンパイルできますが、とても汚いソースコードとなり他のプログラマに嫌われます。 次のようなプログラムでも、問題なくコンパイルできるのです。

コード1
class
	Test
{static void Main() {
System.
			Console.
	WriteLine(
		"Kitty on your lap"
);
			}
		}

上記のコードは問題なくコンパイルできますが、見てのとおり無意味に複雑で読みにくいコードとなってしまいます。

ただし、文字列は途中で改行できません。キーワードや識別子の途中でホワイトスペースを入れると、それが区切りだと解釈されるため、例えば Writ eLine() というようなコードを書くとエラーになります。

演算子や区切り記号は、ホワイトスペースと同様に前後のトークンを分離するという効果もあります。例えば、クラス宣言の中括弧の前後は、通常は見やすさを考慮してスペースを挿入しますが、スペースを入れずに詰めることもできます。

コード2
class Test{static void Maint(){System.Console.WriteLine("Kitty on your lap");}}

このように、改行やスペースを極力少なくしたコードを書くこともできます。