Help us understand the problem. What is going on with this article?

<<~TEXT Rubyのヒアドキュメントのまとめ TEXT

More than 1 year has passed since last update.

Rubyのヒアドキュメント

文字列の書き方の一つ。複数行に渡る長い文字列を作成するときに便利な表記方法。<<<<-<<~で少し違うのでまとめておきます。

基本の使い方

<<識別子
1行目
2行目
3行目
識別子

<<の場合

foo = <<TEXT
これはヒアドキュメント
複数行の文字列を作成するのに便利です。
TEXT

puts a

出力

=> これはヒアドキュメント
    複数行の文字列を作成するのに便利です。

注意

<<を使うと最後の識別子をインデントできない。上の例なら2つ目のTEXTの前にTabとか空白をいれられない。エラーになってしまいます。

<<-の場合

<<-を使えば、識別子をインデントできます。メソッドの内部でヒアドキュメント使う場合など、識別子をインデントしたい場合に便利です。

foo = <<-TEXT
これはヒアドキュメント
複数行の文字列を作成するのに便利です。
  TEXT
#↑空白がはいっていてもエラーにならない。
puts a

出力

=> これはヒアドキュメント
    複数行の文字列を作成するのに便利です。

注意

文字列をインデントしていると出力もインデントされちゃう。

def method
  <<-TEXT
    インデントしたら
    出力もインデントされちゃう。
だから出力の事考えてこういうふうに
かかないといけない。プログラムは見た目悪くなる。
  TEXT
end

出力

    インデントしたら
    出力もインデントされちゃう。
だから出力の事考えると行頭から書くことになる。
プログラムは見た目悪くなる。

<<~の場合

Ruby 2.3以降で実装された構文。
内部の文字列をインデントさせても空白部分が無視されます。
最初の行のインデントが基準になる。例えば、2行目を1行目より一つ深くインデントすると出力は2行目のみがインデントされているようになる。

def method
  <<~TEXT
    インデントした
      1行目よりも深くインデントした。
  TEXT
end

出力

インデントした
    1行目よりも深くインデントした。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした