こんにちは!システムエンジニアのオオイシです。
Rubyの%記法をご存知でしょうか?
%記法を使うとシンプルにコーディングすることが出来ます。
「%wで配列を作る方法を知りたい」
「文字列を作成する%と%Qについて知りたい」
「正規表現で使用できる%rについて知りたい」
「シンボル配列の%iと%Iについて知りたい」
といった方に向けて、この記事では以下の内容について解説します。
【基礎】%記法の一覧
【基礎】配列のための%w記法
【実践】文字列のための%記法
【実践】正規表現のための%r記法
【実践】シンボル配列のための%iと%I記法
などについて解説していきます。
今回はこれらの方法を覚えるために、%記法のさまざまな使い方をわかりやすく解説します!
%記法とは
%記法の本来の目的は、文字列に含まれる「’ ‘」や「” “」を「( )」などの非英数字に置き換えて、「’ ‘」や「” “」に対するエスケープを省略するために利用します。
例えば、次の構文は全て同じ処理結果になります。
- “\“abc\””
- %(“abc”)
- %!”abc”!
- %?”abc”?
- %+”abc”+
2番目以降は「\“」のようにエスケープがないことが確認いただけたでしょうか!?
可読性をよくしてコーディングしやすくすることは、つまり、バグ発生の減少に繋がります!
そして、%wや%Wは配列の作成に特化してコーディングが楽になるように設計された、%記法の延長上のRuby構文なのです。
使用できる%記法の種類や書き方は以下のとおりです。
記法 | 代替前の構文 | 式展開 | コード例 | 実行例 |
---|---|---|---|---|
%,%Q | “ “ (文字列) | あり | %Q(“abc”) | \"abc\" |
%q | ’ ’ (文字列) | なし | %q(‘abc’) | 'abc' |
%W | [ ] (配列) | あり | %W(a b #{c}) | ["a", "b", "c"] |
%w | 同上 | なし | %w(a b #{c}) | ["a", "b", "#{c}"] |
%r | / / (正規表現) | あり | %r(/abc/) | /\/abc\// |
%s | : (シンボル) | あり | %s(abc) | :abc |
%I | [ ] (シンボルの配列) | あり | %I(a b #{c}) | [:a, :b, :c] |
%i | 同上 | なし | %i(a b #{c}) | [:a, :b, :#{c}] |
%x | ` ` (コマンド実行) | あり | %x(ruby -v) | "ruby 2.4.3p205" |
%w記法(配列)
%w記法とは、文字列からなる配列を作成したいときに「[ ]」(ブラケット)や「” “」(ダブルクォーテーション)を省略して記述するためのRubyの構文です。
%wの書き方:
%w(文字列1△文字列2△文字列3...) # △ = 空白
文字列間の空白は配列の要素の区切りとなります。
%w記法を使うと、プログラムコードの可読性がよくなって、コーディングもカンタンになるので、よく利用される書き方です。
%w記法を使って配列を作ってみる
%w記法を使わない場合と使う場合のコードの違いを比較して、どのように可読性がよくなるかを確認して見ましょう。
%w記法を使わない場合:
puts ["侍", "ブログ", "Ruby", "\"%w記法\""]
%w記法を使う場合:
puts %w(侍 ブログ Ruby "%w記法")
実行結果:
侍 ブログ Ruby "%w記法"
このように、%w記法ではスッキリしたコードで文字列の配列が作成できました。
%wと%Wの違い
%W記法は、%wと同様に空白区切りの文字列から配列を作成できます。
違いは、
- %W → 式展開あり
- %w → 式展開なし
のみです。
%Wと%wの違いをサンプルコードで確認してみましょう。
%Wの場合:
blog = "ブログ" puts %W(侍 #{blog})
実行結果:
侍 ブログ
%wの場合:
blog = "ブログ" puts %w(侍 #{blog})
実行結果:
侍 #{blog}
このように、前者の%Wは変数blogの値が配列に登録されて式展開することが確認できました。
式展開についてはこちらで詳しく説明していますのでぜひ参考にしてください。
%と%Q記法(文字列)
ダブルクォーテーションのための%と%Q記法
%記法または%Q記法は「” “」(ダブルクォーテーション)の代替です。
%または%Q記法を使うと、文字列中の「”」のエスケープを省略して文字列を作成できるので、可読性を高めるために有効です。
「” “」と同じで式展開します。
%記法使わない場合と使った場合を比較するプログラムコードを確認してみましょう。
%記法使わない:
puts "\"侍\" \“ブログ\”"
%記法を使う:
puts %("侍" “ブログ”)
実行結果:
“侍” “ブログ”
このように、%記法を使うとエスケープがないので可読性の高いプログラムになることが確認できました。
なお、% と %Q は同じ意味なのでどちらを使っても結果は同じです。
好みで利用するとよいでしょう。
シングルクォーテーションのための%q記法
%q記法は、「’ ‘」(シングルクォーテーション)の代替です。
%q記法を使うと、文字列中の「’」のエスケープを省略して文字列を作成できます。
「’ ‘」と同様に式展開はしません。
%q記法使わない場合と使う場合を比較するプログラムコードを確認してみましょう。
%q記法を使わない:
puts '\'侍\' ブログ'
%q記法を使う:
puts %q('侍' ブログ)
実行結果:
'侍' ブログ
このように、%q記法を使うと「’」はエスケープせずに文字列をコーディングできることが確認できました。
%r記法(正規表現)
%r記法を使うと、正規表現内にある「/」や「[ 」などの文字に対するエスケープを省略し、プログラムコードの可読性をあげることができます。
正規表現の「/ /」と%r記法を使った例を比較してみましょう。
通常の正規表現の「/ /」を使ったコード:
/https:\/\/www.sejuku.net\/blog\//
%r記法を使って「!」を使ったコード:
%r!https://www.sejuku.net/blog/!
このように、%r記法を使うと正規表現のエスケープを省略して、可読性をよくすることが確認できました。
また、正規表現と正規表現のエスケープについては、こちらで詳しく説明していますのでぜひ参考にしてください。
%iと%I記法(シンボル配列)
%i記法は、%wと同様に空白区切りの文字列から配列を作成しますが、こちらは配列の要素がシンボルになります。
%i と%Iの違いは、
- %I → 式展開あり
- %i → 式展開なし
のみです。
%i記法を使って、次の2つのサンプルコード同じ結果を返すことを確認してみましょう。
p [:samurai, :blog, :Ruby]
p %i(samurai, blog, Ruby)
実行結果:
[:samurai, :blog, :Ruby]
このように、%i記法を使うと配列のシンボルの配列が作成できることが確認できました。
%記法の使い方を忘れてしまった場合などの参照用に活用いただけると幸いです。
まとめ
ここでは%記法を使って、
- %w記法を使って配列を作成する
- 文字列のための%記法
- 正規表現のための%r記法
- シンボル配列のための%iと%I記法
などについて解説しました。
%記法を使うと煩雑なエスケープは省略できるので可読性が上がり、つまりはバグの減少につながるので、ぜひ活用してください。
そして、%w記法や%記法の使い方を忘れてしまったらこの記事を確認してくださいね!