今回はRubyのヒアドキュメントの使い方を解説します。
ヒアドキュメント
ヒアドキュメントとは、行を区切りとする文字列リテラルのことです。
識別子「<<」を使って文字列を区切ります。
実際にコードを書いてみたほうがわかりやすいので、書いてみましょう。
1 2 3 4 5 |
puts <<milkman hello!! i am milkman!! i like milk. milkman |
書き方は、識別子「<<」の後に文字列リテラルを区切るための識別子となる文字列(ここではmilkmanが識別子)を書きます。
実行結果は以下のようになります。
1 2 3 |
hello!! i am milkman!! i like milk. |
上記の例では、<<milkman〜milkmanまでの記述を、文字列リテラルとみなしています。
上記の例は以下の書き方と意味は同じとなります。
1 |
puts "hello!!\ni am milkman!!\ni like milk." |
意味は同じですが、この書き方だと読みづらく、後でメンテナンスがしにくくなります。
改行を含む長い文字列を表記する際はヒアドキュメントを使ってみましょう。
インデント
識別子「<<」でヒアドキュメントを書く際、この書き方だとインデントが調整できません。
この識別子を使った場合、必ず、区切りの文字列を書いた行が必要となります。このとき区切りの文字列の前に空白があってはなりません。
識別子「<<」と区切りの文字列の間に「-」を書き込むとインデントがあっても認識されるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
drink = "milk" #識別子「<<」の場合 if drink == "milk" puts <<milkman good morning! lets drink milk!! milkman end #識別子「<<-」の場合 if drink == "milk" puts <<-milkman good morning! lets drink milk!! milkman end |
if文やdef式、classなどを書き込む際、インデントができないと非常に読みにくくなります。
「<<-」を使うと綺麗にコードが書けるようになるので、試してみてください。
式展開
ヒアドキュメントを使う際の式展開には注意点があります。
以下の例を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
drink = 'milk' puts <<milkman { i want to drink #{drink}. } milkman puts <<"milkman" { i want to drink #{drink}. } milkman puts <<'milkman' { i want to drink #{drink}. } milkman |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 |
{ i want to drink milk. } { i want to drink milk. } { i want to drink #{drink}. } |
この結果からわかるように、<<'milkman'のときだけ式展開ができていません。
式展開を行う際は注意しましょう。