マル「それじゃ、今回は文字列の話をするな」
マル「'ruby'
とか"maru"
みたいなのが文字列ずら。シングルクォートで括る場合とダブルクォートで括る場合があるけど、ちょっと動きが違うんだな」
ルビィ「動きって・・・文字列なのに?」
マル「Rubyの文字列は頭がいいんだな。バックスラッシュ記法っていうのがあって、そこで違いが出るずら」
1 2 3 |
puts "Oh yes,\nDoki-Doki Sunshine!!" puts 'Oh yes,\nDoki-Doki Sunshine!!' |
Oh yes,
Doki-Doki Sunshine!!
Oh yes,\nDoki-Doki Sunshine!!
マル「\n
っていうのは改行を表すバックスラッシュ記法だけど、ダブルクォートだと改行されててシングルクォートだと改行されてないのが分かるな?」
ヨハネ「なるほど、シングルクォートは特殊文字を解釈せずに書いた文字がそのまま扱われるわけね」
マル「そんな感じずら。Rubyで使えるバックスラッシュ記法をまとめておくな」
文字 | 意味 |
---|---|
\b | バックスペース |
\f | 改ページ |
\n | 改行 |
\r | 復帰 |
\t | タブ |
\a | ベル |
\s | 空白 |
\e | エスケープ |
マル「あとは、シングルクォートで囲った文字列の中ではシングルクォートは使えないな。'μ's'
みたいなのはだめずら」
ルビィ「そっか、そういう場合はダブルクォートで・・・あれ?バックスラッシュ記法使いたくない場合は?」
マル「そこはちゃんと、別の囲い方が用意されてるんだな」
1 2 3 |
%Q{μ's} %q{μ's} |
マル「%Q
はダブルクォート、%q
はシングルクォートで囲ったのと同じ意味ずら。これだと、文字列中にシングルクォートやダブルクォートがあっても平気なんだ」
マル「ヒアドキュメントっていって、複数行の文字列も書けるずら」
1 2 3 4 5 6 7 |
puts <<"EOS" 君のこころは輝いてるかい? 胸に聞いたら"Yes!!"と答えるさ この出会いがみんなを変えるかな 今日も太陽は照らしてる 僕らの夢 EOS |
君のこころは輝いてるかい?
胸に聞いたら"Yes!!"と答えるさ
この出会いがみんなを変えるかな
今日も太陽は照らしてる 僕らの夢
マル「<<"EOS"
って書くと、次にEOS
が出てくるまでを1つの文字列と見なすんだ。このEOS
は実は何でもいいんだけど、End of StringでEOSがよく使われるな」
ルビィ「長い文章を出力する場合は便利そうだね」
マル「文字列の中に式を埋め込んだりもできるんだ。できること盛りだくさんだな」
1 2 3 4 5 |
school = "浦の星女学院" grade = 1 name = "津島善子" puts "#{school}#{grade}年、#{name}です。" |
浦の星女学院1年、津島善子です。
ヨハネ「み、認められないわ・・・」
マル「ヨハネちゃんはほっといて、これは文字列の中に変数の値を埋め込む例ずら」
ルビィ「簡単なテンプレート機能みたいな感じかな」
マル「文字列の連結は+
でできるずら」
1 2 3 |
"ちか" + "りこ" # "ちかりこ" "るび" + "まる" # "るびまる" |
ヨハネ「・・・カプ厨が湧いてきたわね」
マル「何のことだかわからないずら」
ルビィ「マルちゃんなら、ありかな・・・」
マル「これは非破壊操作、元の文字列は変更せずに連結後の文字列を返してるんだ。だから」
1 2 3 4 5 6 7 |
lhs = "ちか" rhs = "りこ" cp = lhs + rhs puts lhs puts rhs puts cp |
ちか
りこ
ちかりこ
マル「変数の中身が書き換わるわけじゃないんだな。ところが」
1 2 3 4 5 6 |
lhs = "ちか" rhs = "りこ" lhs << rhs puts lhs puts rhs |
ちかりこ
りこ
マル「こうやって、片方の文字列にもう片方を追加するつなげ方もできるずら」
ヨハネ「これだとlhs
は書き換わるわけね。あとは使いどころってところかしら」
マル「文字列はこのくらい覚えておけば当面は何とかなると思うずら。文字列って実際はStringオブジェクトだから、できることはまだまだあるんだけど・・・」
ルビィ「きりがないもんね。じゃ次回はルビィが数値の話、頑張りますっ!」