この章のテーマ §
文字を扱うための基礎中の基礎、文字列定数について説明します。
文字列定数が分かればソースコード中に決まり切った文字列を書き込むことができます。
前提知識 §
Console.Writeメソッド, 変数の基礎, int型, 比較演算子, bool型
解説 §
文字列型(string, System.String)の値をソースコード上に直接書き込みたいことはよくあります。
個人名を書き込みたいことは多くありませんが、"当選者"という言葉なら書き込みたいことがあります。誰の情報を扱うときにも"当選者"は同じものを出力するからです。
最初のプログラムとして有名なハロー・ワールドを書く場合にも、"Hello, World!"という文字列はソースコードに書き込まねばなりません。
さて、ここで重要なポイントは「C#には文字列定数の書き方が3つある」という点です。
なぜ3つもあるのでしょうか。
実は文字列定数には避けられない制約があって、たった1つの十分なやり方は十分ではないからです。
どんな制約でしょうか。
それは、【特定の機能を与えられた文字は文字列に書き込めない】ということです。
だから、エスケープという方法を使い、特定の文字の組み合わせで別の文字を表すします。
たとえば、通常の文字列なら、区切りとなる"記号だけは文字列に含めることができません。そこで、"を含めたいときは\"という2文字を書き込むようにします。\記号自身は\\で表します。
しかし、\を多用する場合はとても不便でソースコードも見にくくなります。
そこで、@を前置する文字列定数を使う場合は制約無しに\を書けるようになっています。"を書きたい時だけ""という2文字で表します。
もう1つの$を前置する文字列は別の役割を持っています。波括弧{}で囲まれた式は式の値に置き換えられるという機能性を持っています。しかし、波括弧{}を多用する文字列では不便なので、通常の文字列も必要とされます。
つまりまとめると、C#の文字列定数の書き方は3つありますが、それぞれに適した用途があり、たった1つにはまとめられません。上手く使い分けて行きましょう。
罠の数々 §
文字列定数とは似て非なる文字定数が存在することに注意しましょう。
文字定数は'で区切り、char/String.Char型に対応します。
そして基本的に1文字しか書くことができません。(1文字に対応しない場合もある)
\記号は円記号に見える場合とバックスラッシュ記号に見える場合がありますがどちらも同じものです。
参考リンク §
文字列 (C# プログラミング ガイド)
サンプルソース: stringConstans §
// 通常文字列
Console.WriteLine("He said, \r\n\"GOOD!\".");
// @前置
Console.WriteLine(@"He said,
""GOOD!"".");
// $前置
int a = 1;
int b = 2;
Console.WriteLine($"{a}足す{b}は{a+b}");
実行結果 §
He said,
"GOOD!".
He said,
"GOOD!".
1足す2は3
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
Console.WriteLine("\"" == @"""");
[[解答]]