0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数行の文字列の書き方(ヒアドキュメント)

Last updated at Posted at 2019-10-15

###ヒアドキュメントとは
文字列をソースコード中に埋め込むための方法の一つ。
ヒアドキュメントを使うことで複数行に渡る長い文字列をすっきり書くことができます。

###書き方

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

識別子は自由に付けることができます。
どのような文字でも構いませんが「EOS」などがよく使われているようです。(EOS=End of String)
(ただし、識別子と記述する文字列内の文字がかぶらないように注意してください。)

###利用例


<<EOS
ヒアドキュメントを解説しています。
ヒアドキュメントをうまく使うと便利です。
EOS
#=> ヒアドキュメントを解説しています。
#=> ヒアドキュメントをうまく使うと便利です。

ヒアドキュメントは文字列と同じく変数へ格納することができます。
さらに開始ラベルの<<識別子は1つの式と見なされます。
そのため<<識別子をメソッドに引数として渡したり、<<識別子をレシーバとしてメソッドの呼び出しをすることができます。

###ヒアドキュメント内で式展開をする
ヒアドキュメントの中で式展開することができます。

name = 'TEXT'
<<Text
EOSとは識別子が違います。
このヒアドキュメントの識別子は#{name}です。
Text
#=> EOSとは識別子が違います。
#=> このヒアドキュメントの識別子はTEXTです。

###ヒアドキュメント内の式展開を無効化する
<<'識別子'のように、識別子をシングルクオーテーションで囲んだ場合は、文字列をシングルクオーテーションで囲んだ時と同じ扱いとなり式展開が無効化されます。
一方で、<<"識別子"のようにダブルクオーテーションで囲んだ時は式展開が有効になります。

name = 'TEXT'
<<'Text'
EOSとは識別子が違います。
このヒアドキュメントの識別子は#{name}です。
Text
#=> EOSとは識別子が違います。
#=> このヒアドキュメントの識別子は#{name}です。

「<<-識別子」と「<<~識別子」の違い

「<<-識別子」のように-を入れると「最後の識別子」の前の空白やタブが無視されるので、「最後の識別子」を自由にインデントさせることができます。

「<<~識別子」のように~を入れると「ヒアドキュメント内部文字列」の前の空白やタブが無視されるので、「文字列全体」を自由にインデントさせることができます。

###引用元

「プロを目指す人のためのRuby入門」から一部引用
ヒアドキュメントによる複数行文字列の作成から引用
https://www.javadrive.jp/ruby/string/index4.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?