こんにちは。Tomoyuki(@tomoyuki65)です。
ヒアドキュメントって聞いたことありますか?
私はシェルスクリプトでは使ったことがありましたが、Rubyでも使えることがわかりました。
ヒアドキュメントは、長い文字列を作成する場合は便利なので、使い方を覚えておいた方が良いでしょう。
この記事では、Rubyでヒアドキュメントを使う方法を解説します。
目次
ヒアドキュメントとは?
ヒアドキュメント(行指向文字列リテラル)とは、ヒア文字列やheredocなどとも呼ばれ、文字列リテラルをシェルスクリプトやプログラミング言語に埋め込むための一つの方法です。
改行や空白などが書いた通りに適用されるため、複数行に渡る長い文字列を作成する場合にスッキリ書くことができます。
ヒアドキュメントは、次のように使います。
<<識別子
1行目
2行目
3行目
識別子
識別子は自由に付けられますが、記述する文字列の中に含まれない文字列を使って下さい。
基本的な使い方
まずは基本的な使い方を覚えましょう。
Rubyでは以下の3つの方法があります。
<<識別子
text = <<EOF
ヒアドキュメントで、
長い文字列を作成します。
EOF
puts text
ヒアドキュメントで、
長い文字列を作成します。
<<-識別子
-を使うと、最後の識別子(以下の例では下のEOF)がインデントさせることができます。
text = <<-EOF
ヒアドキュメントで、
長い文字列を作成します。
EOF
puts text
<<~識別子
Ruby 2.3以降では、「<<~識別子」を使うことが可能です。
~を使うと、内部の文字列をインデントさせても先頭の空白が無視されます。
text = <<~EOF
ヒアドキュメントで、
長い文字列を作成します。
EOF
puts text
ヒアドキュメントで、
長い文字列を作成します。
ヒアドキュメントの式展開
ヒアドキュメントの中では式展開が可能です。
name = 'Tanaka'
text = <<EOF
こんにちは。#{name}さん。
今日はいい天気ですね!
EOF
puts text
<<‘識別子’の場合
<<‘識別子’のように識別子をシングルクォーテーションで囲むと式展開を無効にすることができます。
name = 'Tanaka'
text = <<'EOF'
こんにちは。#{name}さん。
今日はいい天気ですね!
EOF
puts text
<<“識別子”の場合
<<“識別子”のように識別子をダブルクォーテーションで囲むと式展開を有効になります。
つまり、<<識別子と同じです。
name = 'Tanaka'
text = <<'EOF'
こんにちは。#{name}さん。
今日はいい天気ですね!
EOF
puts text
その他の使い方
「<<識別子」は、式として評価されます。
そのため、「<<識別子」をメソッドの引数として渡したり、メソッドを呼び出したりすることが可能です。
# メソッドの引数として渡す場合
def output(val)
puts val
end
output(<<EOF)
このように、
引数として渡せます。
EOF
# メソッドを呼び出す場合
a = <<EOF.upcase
abc
def
EOF
puts a
まとめ
- ヒアドキュメントは、改行や空白を書いた通りに適用され、複数行の長い文字列を書くのに便利
- 基本的な書き方として、「<<識別子」、「<<-識別子」、「<<~識別子」の3つがある
- 「<<識別子」または「<<“識別子”」の場合は式展開が可能で、「<<‘識別子’」の場合は式展開が無効になる
- 「<<識別子」は、式として評価されるため、メソッドの引数として渡したり、メソッドを呼び出したりすることができる
- 関連記事
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す