misc.log

日常茶飯事とお仕事と

C#の逐語的リテラル(Verbatim String Literals)

自分用メモ。英語名などがわからなかったので調べました。その記録。

逐語的リテラルを表す「@」

C#で、文字列の冒頭、ダブルクォーテーションの前に"@"(アットマーク)をつけると、その文字列は「記載されたまま」取り扱われます。たとえば文字列中に特殊な意味合いを持つことがある「¥記号(バックスラッシュ)」などが入っていても、エスケープ文字として扱うこと無くそのまま表示されます。

よく使われるケースとしてはファイル名などのパス文字列ですね。パス文字列は、通常フォルダの区切りに¥を入れますが、C#では¥が特別な意味のある文字としてC#に処理されてしまうので固定文字列として記述する場合は「¥¥」のように2個重ねにします。ところが、冒頭に@が付いているとこれが不要になります。こうした「C#固有の特殊な文字のルール」を無視して書いたままの文字列としてC#に読ませられる「@」が付いた文字列を「逐語的リテラル文字列(verbatim string literals)」と呼びます。カタカナ読みするなら「バーベイタム ストリング リテラル(ズ)」ですね。

C#ではと言いましたが、この「書いたままを表示する」という機能は各種の文書作成ツールや記法でも用意されています。たとえばはてなダイアリーの場合、「>||」と「||<」で囲われた文字列はまさにこの「逐語的文字列」として表示されるので、サンプルコードなどをこれで囲むとはてなダイアリーの記述ルールにある文字であっても書式設定されずにそのまま表示されます。LaTeXなどでも「verbatim」というタグがありましたよね(たしか)。

というわけで、ITの世界では「書いたままを表示したい」というニーズが一定数あるのでこうした機能が用意されていることがおおいです。また、「書けない文字」たとえば改行やタブなどの特殊文字を表すために、書ける文字の組み合わせでそうした意味合いを持つ特殊文字と見なすことがあります。こうした機能をOFFにするのが「@」です。

C#で逐語的リテラルがいつから使えていたか

某所でこの質問が出ていたので少し調べてみたのですが、最近のマイクロソフトが公開している技術文書がすべて関係者が執筆したWikiのような雰囲気になっていて、かつてのMSDN系ページの記法になっておらず、バージョンごとの機能をさっと調べることができませんでした。
いくつか「verbatim string literals」で検索してみたところ、デンマークのAalborg大学の資料がC# 2.0を対象とした文章を公開していて、その中に記述があります(下記)。ということは既にC# 2.0(.NET Framework 2.0)の頃からあったということ。

people.cs.aau.dk

あとはFW1.1と1.0でどうだったか……ですが、ちょっと情報が見つかりません。多分使えたのじゃ無いかと思うのですが……わかったら追記します。