【一人 Ruby Advent Calendar 2017】Ruby の % 記法【22日目】

一人 Ruby Advent Calendar 2017 22日目の記事になります。
そろそろラストスパート

% 記法

Ruby には % 記法という特別なリテラルがあります。
例えば、%w という記法を使うと以下のように『空白文字で分割した』文字列の配列として定義されます。

p %w(homu mami mado)
# => ["homu", "mami", "mado"]

またこの時に記述した %w()()[]{}<> みたいな括弧や『改行を含めた任意の非英数字』を利用することが出来ます。

p %w<homu () mado>
# => ["homu", "()", "mado"]

p %w`'() [] {}`
# => ["'()", "[]", "{}"]

p %w!` " '!
# => ["`", "\"", "'"]

こんな感じでリテラルで定義する記号によって () の記号を変えることが出来ます。

%%Q:ダブルクオート文字列

%%Qは『ダブルクオート文字列』として定義されます。

p %(homu "mami")
# => "homu \"mami\""

# 式展開も行える
p %Q("#{5 + 4}:mado")
# => "\"9:mado\""

%q:シングルクオート文字列

%q は『シングルクオート文字列』として定義されます。

p %q(homu "mami" 'mado')
# => "homu \"mami\" 'mado'"

# 式展開は行われない
p %q(#{2 + 4})
# => "\#{2 + 4}"

%x:コマンド出力

%x は外部コマンドを実行して結果を返します。

p %x(ls)
# => ls コマンドの実行結果

` と同じです。

%r正規表現

%r は『正規表現リテラル』として定義されます。

p %r(\d+)
# => /\d+/

# / もエスケープされる
p %r(http://.*)
# => /http:\/\/.*/

%w:空白文字で区切った要素が文字列の配列を定義

%w は『空白文字で区切った要素が文字列の配列』を定義します。

p %w(homu mami mado)
# => ["homu", "mami", "mado"]

p %w("homu" "ma mi" "mado")
# => ["\"homu\"", "\"ma", "mi\"", "\"mado\""]

%W%w と同等(式展開とバックスラッシュ記法が有効)

%w と同等ですが『式展開とバックスラッシュ記法』が有効です。

p %W(#{2 + 4}:#{[1, 2, 3]})
# => ["6:[1, 2, 3]"]

p %W(homu ma\mi mado)
# => ["homu", "mami", "mado"]

%s:シンボル

%s は『シンボル』で定義されます。
また、式展開、バックスラッシュ記法は無効です。

p %s(homu)
# => :homu

p %s(42)
# => :"42"

p %s(#{1 + 2})
# => :"\#{1 + 2}"

%i:空白文字で区切った要素がシンボルの配列を定義

%i%w と同様に『空白文字で区切った要素』の配列として定義されますが、文字列ではなくてシンボルとして定義されます。

p %i(homu mami mado)
# => [:homu, :mami, :mado]

p %i(homu mami #{2 + 2})
# => [:homu, :mami, :"\#{2", :+, :"2}"

%I%i と同等(式展開とバックスラッシュ記法が有効)

%i と同等ですが、『式展開とバックスラッシュ記法』が有効になります。

p %I(homu mami mado)
# => [:homu, :mami, :mado]

p %I(homu mami #{2 + 2})
# => [:homu, :mami, :"4"]

まとめ

  • % 記法を使って様々な値を定義することが出来る
  • 文字列の配列を定義する場合は %w を使うと楽
  • 正規表現/ を提議したい場合は %r を使うとエスケープする必要がない


正規表現/ を含めいたことは稀によくあるのでそういう場合は %r を使うと楽ですねえ。

参照