2012年8月27日月曜日

[Scala] ””” (トリプルクォート)

文字列リテラルを記述する際に、""" (トリプルクォート)を使うことで、 「 \ 」のエスケープが不要になる。

println("aaa\nbbb");      // \n は改行コード扱い
println("aaa\\nbbb");     // \ をエスケープしたので「\n」という文字列
println("""aaa\nbbb""");  // \ は特殊文字扱いされない。

aaa bbb aaa\nbbb aaa\nbbb

タイプ数が少なくなるかどうかは微妙なところだけどわかりやすくなるのは確か。
「"」もエスケープ不要になる。

println("""abc"d"efg""");

abc"d"efg

主に正規表現の文字列表現でよく出てくる。
正規表現では「\」自体が意味を持つためエスケープだらけで分かりにくくなることが多いので、 確かにこの記法を使うのは有用だろう。



さらに、文字列中の改行も文字列の一部として扱われる。

println("""ABC
  DEF
    GHI""");

ABC DEF GHI

ソースコードの見た目に近い状態で出力されるので、整形済みテキストなどを出力する場合には重宝する。 Java 等では、

System.out.println(
"ABC\n" + 
"  DEF\n" + 
"    GHI");

のようにしないといけないところ。
実際、Play framework で template を Scala コードに変換するとこの """ によって template 中のテキストが記載されている。

地味だが何気に便利な機能。

0 件のコメント:

コメントを投稿