8
2

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 3 years have passed since last update.

ヒアドキュメント【Ruby】

Last updated at Posted at 2020-01-12

今回はRuby技術者認定試験で意外と狙われるヒアドキュメントについて書きます。

そもそもヒアドキュメントとは?

ヒアドキュメントは改行コードを含めて複数行の文字列を書くことができます。

ヒアドキュメントを使わない場合。

puts "ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、\n改行したい箇所に\\nを書くことで改行できる。\nちなみにバックスラッシュを二つ使う\\ことで改行(\\n)をエスケープできる"

【実行結果】

ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、
改行したい箇所に\nを書くことで改行できる。
ちなみにバックスラッシュを二つ使う\\ことで改行(\n)をエスケープできる
=> nil

ただしヒアドキュメントを使うと

here.rb
doq = <<EOS
昨日は雨

今日は晴れ

明日は曇りらしい
EOS
puts doq

【実行結果】

昨日は雨

今日は晴れ

明日は曇りらしい

上記のように\nを書かずに改行の文字列を記載することができます。

ちなみに習慣で識別子にEOSとEOLがよく使われるそうです。

意味はEOSは(end of string)、EOL(end of line)の略です。

他の文字を使っても大丈夫です。

というより、識別子に指定する文字列はヒアドキュメントの内容が理解できるものの方が良いそうです。

here.rb
doq = <<WEATHER
昨日は雨

今日は晴れ

明日は曇りらしい
WEATHER

puts doq
p doq

【実行結果】

昨日は雨

今日は晴れ

明日は曇りらしい
"昨日は雨\n\n今日は晴れ\n\n明日は曇りらしい\n"

<<-

<<-はスペースを書く場合やメソッドチェーンにするときに使います。

here.rb
doq = <<-WEATHER.lines #linesは各行を配列にするstringsのメソッド
  昨日は雨

 今日は晴れ

明日は曇りらしい
WEATHER

  昨日は雨

 今日は晴れ

明日は曇りらしい
["  昨日は雨\n", "\n", " 今日は晴れ\n", "\n", "明日は曇りらしい\n"]

""

ダブルクォートを使うことで式展開ができる

here.rb
a = '雨'
b = '晴れ'
c = '曇り'
doq = <<"WEATHER"
昨日は#{a}

今日は#{b}

明日は#{c}らしい
WEATHER
puts doq
p doq

【実行結果】

昨日は雨

今日は晴れ

明日は曇りらしい
"昨日は雨\n\n今日は晴れ\n\n明日は曇りらしい\n"

###エラー
ちなみに下記はエラーになる

here.rb
doq = <<WEATHER
昨日は雨

今日は晴れ

明日は曇りらしい
 WEATHER
puts doq
p doq

【実行結果】

here.rb:4: can't find string "WEATHER" anywhere before EOF

原因は終端のWEATHERにスペースがあるから。

これを解決するにはスペースをなくすか、<<-にする

here.rb
doq = <<-WEATHER
昨日は雨

今日は晴れ

明日は曇りらしい
 WEATHER
puts doq
p doq

【実行結果】

昨日は雨

今日は晴れ

明日は曇りらしい
"昨日は雨\n\n今日は晴れ\n\n明日は曇りらしい\n"

以上がヒアドキュメントでした。

###参考
今回は参考図書にRuby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書を使用しました。

8
2
2

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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?