今回は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公式資格教科書を使用しました。