ヒアドキュメント
複数行に渡る文字列を一度で定義できる記法 。
なにがいいのか?
例えばphpで改行付きの文字列を書くとき↓のように書く人をみたことないですか?
$str = "aaa" + PHP_EOL + "bbb" + PHP_EOL + PHP_EOL + "ccc"
(PHP_EOLは\nのこと)
とか
$str = "{$piyo}\n\n{$hoge}\n{$fuga}"
とか
よみずらいし、改行つけ忘れそう、結局どんな文字列になるのかわからん・・。
それが多分解消される記述方法じゃないだろうか!
何が良くないのか
インデントが汚く?なります。
※インデントをいれようとすると、それは空白(スペース)になるので。
HowTo
PHP
EOSの部分は任意(下記は一例 EndOfStringの略)
$str = <<<EOS
AAA
BBB
CCC
EOS;
Ruby
EOSの部分は任意
str=<<"EOS"
AAA
BBB
CCC
EOS
Bash
EOSの部分は任意
str << EOS
AAA
BBB
CCC
EOS
Perl
EOSの部分は任意
my $str = <<'EOS';
AAA
BBB
CCC
EOS
Python
pythonは若干他と違うようでダブルクオートx3で囲むようです。
こちらの記法はコメントを書くときにもよくみますね。
str = """
AAA
BBB
CCC
"""
Java
ないので、文字連結はStringBuilderとかつかうのですかね。
まとめ
- 言語によって若干の差はあるものの基本似たような記述ですね。
- スクリプト系には基本あるみたいですね。C++とかScalarとかあるのかな?機会があれば調べます。
- 個人的にはすごく見やすくて好きです。よく使います。そしてこれからも。