この記事はQiitaに投稿されたものの転載です。


AAなどの文字列はエスケープすると超絶見難くなるのでそのまま書きたくなった。

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  |__/  |__/";

1

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)";//これはだめ

たくさんのカッコで囲まれた文字列とかを書くときに必要かもしれない。

好きな言葉をデリミタに使うこともできる。その場合デリミタのすぐ後に改行を入れる必要がある。

string dman = q"DmanisGod
      ____ 
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/
DmanisGod";
writeln(dman);
      ____
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/

最後に改行ができてしまうため注意が必要である。


追記

string s =
`      ____
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/`;

3

こっちのほうがいいですね……

  1. http://qiita.com/kotet/items/a04955c206a2f56e16d8 

  2. http://dlang.org/spec/lex.html 

  3. https://twitter.com/SagafroKichigai/status/805188096769736704