讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby】文字列の取り扱い、%記法およびヒアドキュメントの使用方法

%記法を使う

文字列をputsで出力したい時は、シングルクォートかダブルクォートで囲うのが普通だが、%記法でも文字列を作ることができる。

それでは早速使ってみる。

出力する文字列

今回は、"Don't move!"と出力する。

意外に初級者が知らないバックスラッシュ(\)の入力方法。
小僧はMacデビュー時は知りませんでした。
普段使わないですしね。

optionボタン+ ¥マークボタン

サンプルコード

puts %q! "Don't move\%"!

出力を確認すると、、

=>"Don't move!"

大丈夫そうですね。

簡単な解説

上記のサンプルでは%q!..!を利用したので、エクスクラメーションマークの前にバックスラッシュを記載しないとエラーになるので気をつけてください。

エクスクラメーションマーク!じゃなくてもいい

先のサンプルでは%q!..!でしたが別にエクスクラメーションマークでなくてもかまいません。

例えばこれでも

puts %q( "Don't move%"!)

これでも

puts %q{ "Don't move%"!}

これでも

puts %q$ "Don't move!"$

これでも

puts %q| "Don't move!"|

任意の記号を使うことができます。

ヒアドキュメント(行指向文字列)

行指向文字列という言葉の意味が全く頭に入ってこないからどうしよう、、

ということで色々、調べていると、要はDBとかレコード・カラム、フィールド諸々で行指向という考え方と列指向という考え方があるそうです。

下記サイトに特徴(あくまでDBに対してですが)が説明されていたので引用させていただきます。

support.treasuredata.com

行指向の特徴

・少数の行に対する多くの列の取得が効率的
・少数の行に対する多くの列の更新が効率的

列指向の特徴

・大量の行に対する少数の列の集約処理が効率的
・全行に対する少数の列の一括更新が効率的

なので、ヒアドキュメントもフィールドを対象として少数行の複数列みたいなニュアンスで利用されている言葉ではないか思います。

docs.ruby-lang.org

では実際に利用してみる

text =<<EOS
これはヒアドキュメントです。
複数行の文字列を作る際に利用します。
EOS

puts text

はい出力もこの通りです。

これはヒアドキュメントです。
複数行の文字列を作る際に利用します。

識別子は自由でOK

先ほどのサンプルはEOSとしましたが、例えば下記のようにAAAとかにしても問題ありません。

text =<<AAA
これはヒアドキュメントです。
複数行の文字列を作る際に利用します。
AAA

puts text

ヒアドキュメント内でも式展開が利用できます

string = 'ヒアドキュメント'

text =<<AAA
これは#{string}です。
複数行の文字列を作る際に利用します。
AAA

puts text

これはヒアドキュメントです。
複数行の文字列を作る際に利用します。

インデントさせることができる(これわかりにくいです)

これは出力に関係あることではなく、コードを書く側のための機能です。

例えば、このサンプルコードの終わりのAAAをインデントさせたいときに-を入れてあげるとインデントできます。

こちら-を挿入せずにインデントさせた場合はエラーとなってしまします。

string = 'ヒアドキュメント'

text =<<-AAA
これは#{string}です。
複数行の文字列を作る際に利用します。
 AAA
↑ここ

puts text

式展開を無効化させられる(デリミタ的な役割かな?)

先ほどヒアドキュメントでは式展開を利用できることを紹介しましたが、式展開を無効化することもできます。

式展開を無効化する際には識別子をシングルクォート’’で囲ってあげます。

string = 'ヒアドキュメント'

text =<<-'AAA'
これは#{string}です。
複数行の文字列を作る際に利用します。
 AAA

puts text

これは#{string}です。 => 複数行の文字列を作る際に利用します。

※ダブルクォート””で識別子を囲った場合は式展開が利用できます。
つまり、通常通りの動きになります。

識別子は1つの式として見なされる

<<識別子をメソッドの引数として渡したり、メソッドを呼び出すことができる。

a = "松井秀喜"

a.prepend(<<AAA)
高橋由伸
清原和博
AAA

puts a

高橋由伸
清原和博
松井秀喜

長くなりそうなのでこの辺りでやめておきます。

最後に

この記事はプロを目指す人のためのRuby入門から学んだことを参考にして内容が作られています。

Rubyを本格的に勉強したいと考えられている方は是非、下記リンクに書籍のリンクを貼っているので確認してみてください。