ヒアドキュメントによる複数行文字列の作成

広告

複数行の長い文字列を作成する場合にはヒアドキュメントを使用することが出来ます。書式は次の通りです。

<<"識別子"
1行目
2行目
...
最終行
識別子

上記の場合、「<<"識別子"」の次の行から「識別子」の前の行末までが作成される文字列となります。改行されている箇所は実際に改行が文字列に入ります。「<<"識別子"」は行頭である必要はありませんが、最後の「識別子」は行頭に記述する必要があります。

識別子には任意の文字列を指定できます。1文字でなくても構いません。どのような文字でも構いませんが「EOS」などがよく使われているようです。(EOS=End of String)

<<"EOS"
こんにちは
お元気ですか
ではさようなら
EOS

識別子をダブルクオーテーションで囲んだ場合は文字列をダブルクオーテーションで囲んだ場合と同じ扱いになり、シングルクオーテーションで囲んだ場合は文字列をシングルクオーテーションで囲んだ場合と同じになります。(単に識別子が記述された場合は、ダブルクオーテーションで囲んだ場合と同じです)。

<<'EOS'
こんにちは
お元気ですか
ではさようなら
EOS

「<<"識別子"」の代わりに「<<-"識別子"」を使うと最後の識別子の前に空白やタブを記述することができます。

<<-"識別子"
1行目
2行目
...
最終行
  識別子

ヒアドキュメントの使用方法

ヒアドキュメントは文字列ですので、他の文字列と同じく変数などに格納できます。(変数については他のページで詳しく確認します)。

str = <<"EOS"
こんにちは
お元気ですか
ではさようなら
EOS

また「print」メソッドなどの引数に指定する場合は次のような記述方法となります。

print(<<"EOS")
こんにちは
お元気ですか
ではさようなら
EOS

このような場合、「<<"識別子"」が書かれた箇所に次の行から最後の「識別子」の前の行までを1つの文字列と見なして「<<"識別子"」と置き換えます。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test4-1.rb

#! ruby -Ku
require "kconv"

print(Kconv.tosjis(<<"EOS"))
こんにちは
  お元気ですか
    ではさようなら
EOS

上記のプログラムを「test4-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

ヒアドキュメントによる複数行文字列の作成

ヒアドキュメント内の各行の先頭に空白などが含まれている場合は、その空白も含めた文字列となりますので注意して下さい。

( Written by Tatsuo Ikura )