何もかもが初心者ですが

プログラミングもアウトプットもブログも初心者ですが、初心者なりに成長するためにブログを書こうと思います

Cherry本勉強中 8月25日

文字列について

文字列はシングルクオート('')、ダブルクオート("")だけではなく、%記法でも作ることが可能
cherry本でこれを読んで、最初はシングル・ダブルクオートだけで良いのでは?と考えたけども、文字列内にシングル・ダブルクオートを表示したい場合などに有効だなと考え直しました。

%q! !/ %Q! ! /%! !

%q! ! => シングルクオートと同じ

puts %q!私は'これは何?'と言った!

%Q! ! => ダブルクオートと同じ %! ! => ダブルクオートと同じ

data = "りんご"
puts %Q!この果物は#{data}ですか?!
puts %!この#{data}はここで育ったものですか?!

ここで使用した! !ですがこれは? ?や^ ^でもOKです。また( )、[ ]、{ }なども使えます

ヒアドキュメント

puts "line1,
line2"
line1,
line2

しかし、このような形は長文には適さないので、もっとスッキリする形を使う

<<識別子
1行目
2行目
3行目
識別子

<利用例>

a = <<text
これは利用例です。
こういう形式は
複数行に渡る長い文字列を作成する時に便利です。
text

puts a
これは利用例です。
こういう形式は
複数行に渡る長い文字列を作成する時に便利です。
  • <<-を使うと最後の識別子をインデントさせることができる
def test
  <<-text
これは利用例です。
<<-を使用すると最後の識別子をインデントできます。
  text
end 

puts test
これは利用例です。
<<-を使用すると最後の識別子(text)をインデントできます。

ちなみにこうするとエラーになります (<<-を使用していないからインデントが通用していない為です)

def test
  <<text
これは利用例です。
使用しないとエラーになります
  text
end 

puts test

<<~を使うと内部文字のインデントが無視されます

def test_2
  <<~text
  これは利用例です。
  <<~を使用するとインデントを無視します
    text
end 
  
puts test_2
  
これは利用例です。
<<~を使用するとインデントを無視します

ちなみにこれを<<-にするとどうなるか

def test_2
  <<-text
  これは利用例です。
  <<~を使用するとインデントを無視します
    text
end 
  
puts test_2
  これは利用例です。
  <<~を使用するとインデントを無視します

↑こちらはインデントされているのがわかるでしょうか?

ヒアドキュメントには式展開が有効!

fruit = "りんご"
f = <<text
いらっしゃいませ、お客様!
本日のオススメフルーツは#{fruit}です!
text

puts f
いらっしゃいませ、お客様!
本日のオススメフルーツはりんごです!

ちなみに式展開を無効にするには↓のようにします

fruit = "りんご"
f = <<'text'
いらっしゃいませ、お客様!
本日のオススメフルーツは#{fruit}です!
text

puts f
いらっしゃいませ、お客様!
本日のオススメフルーツは#{fruit}です!

ヒアドキュメントは引数になる

a = ""
# prependは渡された文字列を先頭に追加するメソッド
a.prepend(<<text)
いち

さん
よん
text

puts a
いち
に
さん
よん
ご

<<識別子に対してメソッドを呼び出せる

#作成した文字列に、直接upcase(文字列を全て大文字にするメソッド)を呼び出す
b = <<text.upcase
abc
def
text

puts b
ABC
DEF

とりあえず、ここまでにしたいと思います。 ちょっと眠いので(笑)

参考 「プロを目指す人のためのRuby入門」 参照 ヒアドキュメント - Wikipedia