Rubyでプログラムの中にテキストを埋め込む場合、%w記法を用いれば格段に見やすく記述することが可能です。しかし%wの使い方どころか、%記法とは何かを知らない方が多いかもしれません。そこで今回は%記法の基本と%w記法を用いた文字列の書き方について紹介します。
Rubyの%記法とは
プログラムの中にテキストを文字列として記述する場合、「”」で囲うことのが一般的です。しかし、配列などで複数のテキストを並べて記述してしまうと、かなり読み難く感じます。そのような場合、Rubyのプログラムなら%記法の利用が可能です。
なおRubyの%記法とは、先頭に%を付けて定義する方法で、文字列リテラル、コマンド出力、正規表現リテラル、配列、シンボルを定義できます。そして今回紹介する%w記法は、%記法の1つです。まずはRubyの%記法について紹介します。
%記法の基本
プログラムの中の文字列は「’」や「”」で囲われています。それだけでも読み難いのに、「’」や「”」を含む文字列を作る場合はバックスラッシュによるエスケープが必要です。そして複数の「’」や「”」を含む文字列を作成していると、よくミスしてしまいます。
%記法は、「’」や「”」を別の文字に置き換えて、読みやすいプログラムが書けるのが特徴方です。なお文字列を記述する際、%(パーセント)から書き始めるので%記法と呼びます。
例えばバックスラッシュで「”」をエスケープした文字列は、次のように「()」を使った%記法で書き直せます。
作りたい文字列
“test”
\でエスケープした文字列の例
“\”test\””
%記法で書き直した文字列の例
%(“test”)
%記法の種類
%記法では、%とそれに続く1文字の組み合わせによって、「”」や「’」、文字列の配列などを見やすく定義することが可能です。次に%記法で使える書き方を紹介します。
%(文字列) : ダブルクォート文字列 例:”test”
%Q(文字列) : 同上
%q(文字列) : シングルクォート文字列 例:’test’
%x(文字列) : コマンド出力 例:`ls -l`
%r(文字列) : 正規表現 例:/\/test\//
%w(文字列) : 要素が文字列の配列(空白区切り) 例:[“one”, “two”, “three”]
%W(文字列) : 要素が文字列の配列(空白区切り)。式展開、バックスラッシュ記法が有効
%s(文字列) : シンボル。式展開、バックスラッシュ記法は無効 例:test
%i(文字列) : 要素がシンボルの配列(空白区切り) 例: [:one, :two, :theree]
%I(文字列) : 要素がシンボルの配列(空白区切り)。式展開、バックスラッシュ記法が有効
なお、文字列を囲む()は別の記号で書き換えることが可能です。
%記法による配列の作り方
先ほど紹介したようにRubyには%記法という文字列を定義方法があり、%記法を使うことでプログラムの中に文字列を読みやすく書くことが可能です。なかでも要素が文字列の配列を記述する%w記法がよく使われます。
次から%w記法を用いた配列の作り方について紹介します。
%w記法の使い方
先ほど紹介したように%wで要素が文字列の配列を見やすく記述することが可能です。%wでは()の中に空白で区切った文字列を記述すると、それを文字列の配列に変換します。
%wの文法
配列 = %w(文字列1 文字列2 文字列3 ….)
なお文字列を囲む()の代わりに[]、{}、などで囲うことも可能です。
次に一般的な配列の書き方とそれを%wを使った書き直した例を紹介します。
一般的な配列の例
arr = ["one", "two", "three"] p arr # ["one", "two", "three"]を表示する
%w記法を使った配列の書き方の例
arr = %w(one two three) p arr # ["one", "two", "three"]を表示する
比べて解るように%wを利用することで「”」を省略して書けるので、文字列の配列を見やすく書けます。
%W記法の使い方
先ほど%w記法の使い方を紹介しましたが、Rubyでは小文字のwの代わりに大文字のWを使った%W記法も使えます。%W記法は、%w記法と同じように文字列を空白で区切るだけでは配列が作れる記法で、さらに要素に変数を指定することで、その変数の値を展開した配列も作れます。
なお%W記法で変数を展開するには、文字列の代わりに#{変数名}を使います。
%W記法の例
str1 = "eleven" str2 = "twelve" arr = %W(one two #{str1} #{str2}) p arr # ["one", "two", "eleven", "twelve"]
この例では、文字列str1とstr2を、%W記法の()内に記述した#{str1}と#{str2}を展開した配列を作成します。
%w記法で空白を使った文字列を作るには
%w記法と%W記法の()内に記述する文字列の中で空白が区切り文字として扱われるため、文字列の中には空白に含められません。もし、空白を含む文字列を作りたい場合は、バックスラッシュでエスケープしてください。
空白を含む文字列の配列の例
arr = ["one two", "three"] p arr # ["one two", "three"]を表示する
%w記法を使った空白を含む文字列の書き方の例
arr = %W(one\ two three) p arr # ["one two", "three"]を表示する
%w記法で指定する文字列の空白の前に「\」(バックスラッシュ)を付けることで、「”one two”」を作れます。
%w記法を使う場合の注意点
これまで紹介したように%w記法は、Rubyで文字列のみの配列を作る際、読みやすい書き方が可能です。しかし使ううえで注意してほしい点もあります。
次から%wを利用して配列を作るうえで注意してほしい点について紹介します。
改行は空白と同じ扱い
%w記法で文字列の配列を作る場合、改行も空白と同じく区切り文字として扱われます。そのため先ほどの区切り文字に空白を利用した例は、下記のように改行で書き換えることが可能です。
区切り文字に改行を使った%w記法の例
arr = %w( one two three ) p arr # ["one", "two", "three"]を表示する
もし長い文字列を使った配列を作る場合は、区切り文字に改行を使用して読みやすいプログラムを記述してください。また、改行を含む文字列は、別の要素に分けられてしまうので注意してください。
数字は文字列になるので注意
%w記法で配列の要素を記述した場合、その要素は文字列として扱われます。%w記法では数字を含む配列を作成できないので注意してください。例えば、下記のように%w記法の括弧の中に数字を記述すると、その数字を文字列にした配列が作られます。
要素に数字を用いた%w記法の例
arr = %w(1, 2, 3, 4, 5) p arr # ["1", "2", "3", "4", "5"]
また%W記法で変数を展開した場合も、変数が数字の場合でもその数字が文字列に変換されて配列に格納されます。
%W記法で数字の変数を展開した場合の例
num1 = 11 num2 = 12 arr = %W(one two #{num1} #{num2}) p arr # ["one", "two", "11", "12"]を表示する
まとめ
Rubyのプログラムでは%記法が使えるので、文字列をより見やすく記述することが可能です。そして、今回紹介した%w記法なら、複数の文字列を空白で区切っただけでのシンプルで読みやすく記述で、文字列の配列を定義できます。
さらにバックスラッシュで空白をエスケープすれば空白文字を文字列に含めたり、大文字のWを使った%W記法を使って変数の文字を配列に埋め込むことも可能です。ただし文字列に改行を含められず、数字が文字列扱いになるなど、使ううえで注意してほしい点もあります。
%w記法をうまく活用して、より読みやすいRubyのプログラムを作成してください。