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 1 year has passed since last update.

ヒアドキュメントについて

Posted at

rubyシルバーを勉強していくなかで、hashについてちゃんとわかっていなかった今回は解説させていただこうとおもいます。

##ヒアドキュメントとは
複数行にわたる長い文章の文字列を扱い場合に便利な機能のことです。
言われてもピンとこないとおもいますので、実際にコードを見ていきましょう
ヒアドキュメントを使わないときと、使うときで比較してみていきましょう

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

上の書き方は、ヒアドキュメントを使わない書き方です。これでも、コード上は何も悪いわけではないのですが、なんか見た目悪くないですか?
可読性が落ちるんですね。
では次に、ヒアドキュメントを使う書き方を見ていきましょう。

text = <<EOS
ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、

改行したい箇所に\\nを書くことで改行できる。

ちなみにバックスラッシュを二つ使うことで改行(\\n)をエスケープできる
EOS

puts text

=> #ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、

改行したい箇所に\nを書くことで改行できる。

ちなみにバックスラッシュを二つ使うことで改行(\n)をエスケープできる

ヒアドキュメントを使うと、かなり見やすくなりましたね!

##ヒアドキュメントの使い方
今回では識別子に、EOSが使われていますが、EOSじゃなくてもいいんです。
慣習的に、EOS(End Of String), EOF(End Of File), EOL(End Of Line)が使われます。

でも、識別子が一致していれば、名前は何でもいいんです。
そのため、以下のような書き方でもOKです

text = <<HOGE
ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、

改行したい箇所に\\nを書くことで改行できる。

ちなみにバックスラッシュを二つ使うことで改行(\\n)をエスケープできる
HOGE

puts text

=> #ヒアドキュメントを使わない場合はこのようにクオーテーションで囲い、

改行したい箇所に\nを書くことで改行できる。

ちなみにバックスラッシュを二つ使うことで改行(\n)をエスケープできる

##インデントをつける場合
インデントをつけるときは、識別子の前に「-」をつけることでインデントがつくんです。

data = <<-EOF
  hoge
  fuga
  hogehoge
EOF
=> "  hoge\n  fuga\n  hogehoge\n"

puts data
#
  hoge
  fuga
  hogehoge

##インデントをつけない場合
インデントをつけないときは、識別子の前に「~」をつけることでインデントを排除できるんです

data = <<~EOF
  hoge
  fuga
  hogehoge
EOF

=> "hoge\nfuga\nhogehoge\n"

##実際に問題を解いてみましょう

image.png

※選択されている回答は間違っています
今回の問題では、識別子の前に「-」をついています。つまりインデントが適用されるんですね。
よって、この問題の正解は
" Hello,\n Ruby\n"
が正解です

以上です。

何か間違いがございましたら、ご教示いただけますと幸いです。

0
0
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
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?