この記事はQiitaに投稿されたものの転載です。
AAなどの文字列はエスケープすると超絶見難くなるのでそのまま書きたくなった。
エスケープされ見るも無残な姿になってしまったD言語くん1
string dman = " ____\n L__L|\n / \\\n / \\\n / _______ \\\n \\ \\#/ \\/ \\ /\n \\|#| O| O|#\\\n |#L _L__ #|\n |###| |##|\n /###/ /##|\n /###/ /##|\n /###/___/###/\n /###########/\n /##########/\n / \\\n \\ /\n _ \\ /__\n |__/ |__/";
Delimited Stringsというものがある。2デリミタ、文字列の終了を表す記号のある文字列である。それを使って以下のように書ける。
string s = q"/123"\n\n"/";//string dman = "123\"\\n\\n\"";
writeln(s);
このように出力される
123"\n\n"
通常エスケープしなければならない"
がそのまま出力され、改行を表すはずの\n
がそのまま出力されている。うれしい。この場合/
がデリミタとなって、それに囲まれた部分で自由に書ける。ただしデリミタである/
は書けない。
string s = q"/a/a/";//エラーになる
ただしNesting Delimiterという特殊なデリミタもある。
string s1 = q"((a)())";//(a)()
string s2 = q"(a(a)";//これはだめ
たくさんのカッコで囲まれた文字列とかを書くときに必要かもしれない。
好きな言葉をデリミタに使うこともできる。その場合デリミタのすぐ後に改行を入れる必要がある。
ソースコード中に降臨できてご満悦のD言語くん
string dman = q"DmanisGod
____
L__L|
/ \
/ \
/ _______ \
\ \#/ \/ \ /
\|#| O| O|#\
|#L _L__ #|
|###| |##|
/###/ /##|
/###/ /##|
/###/___/###/
/###########/
/##########/
/ \
\ /
_ \ /__
|__/ |__/
DmanisGod";
writeln(dman);
出力
____
L__L|
/ \
/ \
/ _______ \
\ \#/ \/ \ /
\|#| O| O|#\
|#L _L__ #|
|###| |##|
/###/ /##|
/###/ /##|
/###/___/###/
/###########/
/##########/
/ \
\ /
_ \ /__
|__/ |__/
最後に改行ができてしまうため注意が必要である。
追記
https://t.co/vx1HqYqmqd
— 黄前久美子さんと高坂麗奈さんの距離感 (@shitsyndrome) 2016年12月6日
`` リテラルでいいんじゃない?と思うんだけど、デリミタの指定込みのネタかな
``リテラルを知らなかったことに死ぬほどキレてるD言語くん3
string s =
` ____
L__L|
/ \
/ \
/ _______ \
\ \#/ \/ \ /
\|#| O| O|#\
|#L _L__ #|
|###| |##|
/###/ /##|
/###/ /##|
/###/___/###/
/###########/
/##########/
/ \
\ /
_ \ /__
|__/ |__/`;
こっちのほうがいいですね……