文字列補間式 $
について学習したので自分用メモとしてまとめました。
何か間違っていたら教えていただけると嬉しいです。
読みやすい
string.Format
を使って書くと...
string name = "Sanonosa";
int hour = DateTime.Now.Hour;
string message = string.Format("こんにちは、{0}さん。今は{1}時です。", name, hour);
string.Format
と書くのが長いし、第二引数以降がどの {n}
と対応しているかわかりにくいです...。
文字列補間式 $
を使って書くと
文字列の先頭に $
をつけるだけオーケー。
字列の中に直接埋め込むことができます。
string name = "Sanonosa";
int hour = DateTime.Now.Hour;
Console.WriteLine($"こんにちは、{name}さん。 今は{hour}時です。");
実行時エラーをコンパイルエラーとして検出できる
以下のコードは実行時にエラーが発生しますが、コンパイルが通ってしまいます。
実行されないとエラーにならないため見落とす危険性があります。
埋め込む文字列が足りない
string.Format("こんにちは、{0}さん。今は{1}時です。", name);
埋め込む文字列が増えてくるとやってしまいがちです。
$
なら不注意な僕でもまず間違えようがないです。
以下のコードは書式文字列を設定する際、誤って :
(コロン)ではなく ;
(セミコロン)が使われていますが、これも実行されて初めて例外が発生します。
書式文字列の設定が間違っている
var text = string.Format("この本は{1000;c}です");
$
を使っておけばコーディング中にIDEがエラーを教えてくれますし、気づかなくてもコンパイルが通らないので安心です。
静的解析やコンパイルでエラーになる
var text = $"この本は{1000;c}です"; // エラー
書式設定できる
すでに書きましたが、 string.Format
と同様に書式設定ができます。
var now = DateTime.Now;
Console.WriteLine($"{now:yyyy年MM月dd日}"); // "2018年04月01日"
var today = DateTime.Today;
Console.WriteLine($"{today.Year}年{today.Month,2}月{today.Day,2}"); // "2018年 4月 1日"
var num1 = 1234567890;
Console.WriteLine($"{num1:#,0}"); // "1,234,567,890"
var num2 = 123;
Console.WriteLine($"{num2:00000}"); // "00123"
エスケープ
{
自体を出力したい場合 {{
と書きます。
var framework = "Angular";
Console.WriteLine($"{framework}のデータバインドは{{{{}}}}と書きます");
// "Angularのデータバインドは{{}}と書きます"
読んでいただきありがとうございました。
$
は読みやすいしエラーも減るということで積極的に使っていこうと思います。