Ruby 2.1の基本構文/基本文法まとめ&Pryの使い方若手エンジニア/初心者のためのRuby 2.1入門(2)(3/7 ページ)

» 2014年03月27日 18時00分 公開
[著:麻田優真、監修:山根剛司,株式会社アジャイルウェア]

文字列リテラル

クォーテーションによる記法

 Rubyで文字列を表現する場合、主にダブルクォーテーションを使う記法と、シングルクォーテーションを使う記法があります。

[1] pry(main)> "Alice found a bottle"
 => "Alice found a bottle" 
[2] pry(main)> 'Alice found a bottle'
 => "Alice found a bottle"

 ダブルクォーテーションを使う記法だと、以降で説明する、式展開とバックスラッシュ記法が使えます。

式展開

 文字列中に「#{}」を埋め込むと、中括弧の中身がRubyのコードして実行されます。以下の例では、「name」という変数に「Alice」という文字列を格納し、それを式展開して使っています。

[3] pry(main)> name = "Alice"
 => "Alice" 
[4] pry(main)> "#{name} found a bottle"
 => "Alice found a bottle"

バックスラッシュ記法

 C言語に影響を受けた言語の経験者なら、「改行を表す文字として『\n』が使える」ことをご存じかと思います。Rubyでも同様に、改行やタブなどの文字をバックスラッシュを用いて表現できます。

表1 Rubyの主なバックスラッシュ記法
記法 意味
\t タブ
\v 垂直タブ
\n 改行
\r キャリッジリターン
\f 改ページ
\b バックスペース
\a ベル
\e エスケープ
\s 空白
\x 文字「x」そのもの

%記法

 少し特殊な文字列の記法として、「%記法」があります。文字列中に、クォーテーションそのものが頻出する場合などに便利です。具体例を以下に示します。

[5] pry(main)> %!Alice found a bottle!
 => "Alice found a bottle" 
[6] pry(main)> %Q{Alice found a bottle}
 => "Alice found a bottle" 
[7] pry(main)> %q{Alice found a bottle}
 => "Alice found a bottle"

 「%!」と「%Q」はダブルクォーテーションと同様、式展開とバックスラッシュ記法が有効になり、「%q」はシングルクォーテーションと同様の動作となります。

 また、「%Q」「%q」に続けて書かれている中括弧の代わりに、任意の文字を使えます。従って、以下のような記法も有効です。

[8] pry(main)> %Q$Alice found a bottle$
 => "Alice found a bottle" 
[9] pry(main)> %q(Alice found a bottle)
 => "Alice found a bottle"

ヒアドキュメント

 複数の行にわたって長い文字列を書きたい場合には、ヒアドキュメントが便利です。「EOS」の部分には、好きな文字を識別子として使うことができます。

[10] pry(main)> <<EOS
[11] pry(main)> Alice found a bottle
[12] pry(main)> labeld "drink me!"
[13] pry(main)> EOS
 => "Alice found a bottle\nlabeld \"drink me!\"\n"

 また、識別子の前にハイフン「-」を付けると、終端の「EOS」をインデントできます。

[14] pry(main)> <<-EOS
[15] pry(main)> Alice found a bottle
[16] pry(main)> labeld "drink me!"
[17] pry(main)>   EOS
 => "Alice found a bottle\nlabeld \"drink me!\"\n" 

 識別子をダブルクォーテーションで囲む「"EOS"」か、上述の例のように囲まない場合は、バックスラッシュ記法と式展開が有効となります。一方で、シングルクォーテーションで囲む「'EOS'」の場合は、バックスラッシュ記法と式展開は無効となります。

補足「文字列リテラルの使い分け」

 文字列リテラルの使い分けほど、Rubyプログラマーによって好みの異なるものはないでしょう。

 筆者は、基本的にダブルクォーテーションを使い、文字列中にバックスラッシュが頻出するなどの特段の理由がある場合に限り、シングルクォーテーションを使うスタイルに落ち着いています。%記法はほとんど使いません。

 理由としては、次の2点が挙げられます。

  • 式展開が必要になったときに、いちいちダブルクォーテーションに書き換えるのが面倒
  • C言語に影響を受けた多くの言語ではシングルクォーテーションは文字リテラルに使われるので、ダブルクォーテーションを使う方が文字列らしく見える

 シングルクォーテーションを好むRubyプログラマーも多いので、これがベストプラクティスかどうかは分かりません。月並みですが、プロジェクトの慣例に従うのが無難でしょう。


シンボル

 「シンボル」は文字列リテラルに似ていますが、内部的には数値として扱われるデータです。文字列とシンボルは一対一に可換です。シンボルは「:」(コロン)に識別子を続ける形で書きます。

[1] pry(main)> :alice
 => :alice

 また、以下のような書き方もできます。ダブルクォーテーションで囲った場合は、式展開やバックスラッシュ記法が使えます。

[2] pry(main)> :"alice"
 => :alice 
[3] pry(main)> :'alice'
 => :alice 
[4] pry(main)> %s{alice}
 => :alice

 また、シンボルは常に一意であるため、何度評価されても同じオブジェクトを返します。以下の例では、「:alice」というシンボルオブジェクトと「"alice"」という文字列オブジェクトを3回ずつ生成し、「object_id」メソッドでオブジェクトのIDを取得して比較しています。

 文字列の場合は、同じ「"alice"」という文字列データを持っていますが、同一ではないオブジェクトが評価のたびに生成されていることが分かります。

[1] pry(main)> :alice.object_id
=> 823528
[2] pry(main)> :alice.object_id
=> 823528
[3] pry(main)> :alice.object_id
=> 823528
[4] pry(main)> "alice".object_id
=> 70290639242260
[5] pry(main)> "alice".object_id
=> 70290639114000
[6] pry(main)> "alice".object_id
=> 70290638963520

補足「その他のリテラル」

 ここでは紹介しきれませんでしたが、他にもコマンド出力、正規表現リテラルなどのリテラルがあります。また、配列オブジェクトやハッシュオブジェクトを生成するためのリテラルもあります。

 ここで紹介しなかったリテラルは、以降の連載の、関連の深い回で紹介します。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。