Rubyのパーセント記法について

f:id:ryoutaku_jo:20190714065630p:plain

【結論】

・文字列(Stringクラスのインスタンス)を生成する際、通常は""''で文字を囲って、文字列と認識させる必要がある

・パーセント記法とは、""''以外の記号などで文字列を囲って、文字列と認識させる記法

・可読性の向上やコード量の削減といった目的で利用されるケースが多い

【目次】

【本題】

パーセント記法について

Rubyでは、通常文字列(Stringクラスのインスタンス)を生成する際、通常は""''で文字を囲って、文字列と認識させる必要があります。

パーセント記法とは、""''以外の記号などで文字列を囲って、文字列と認識させる記法です。

パーセント記法の種類

パーセント記法には生成したい値によって記法が異なります。

以下が、生成される値と対応した記法です。

%・・・ダブルクォート文字列(%Qと同等) %Q・・・ダブルクォート文字列(%と同等) %q・・・シングルクォート文字列 %s・・・シンボル %W・・・要素がダブルクォート文字列となる配列 %w・・・要素がシングルクォート文字列となる配列 %x・・・コマンド入力 %r・・・正規表現

ダブルクォート文字列・シングルクォート文字列

基本的な""''で文字を囲った時と同じ働きをする記法です。

ダブルクォート文字列を生成する場合は、%Qを用います。

%*hoge*
=> "hoge"

%Q(hoge)
=> "hoge"

シングルクォート文字列を生成する場合は、%qを用います。

%q!hoge!
=> "hoge"

シンボル

シンボルを生成する場合は、%sを用います。

%s!hoge!
=> :hoge

配列

パーセント記法では配列も生成出来ます。

要素としたい文字列を空白文字で区切って用います。

要素の文字列をシングルクォート文字列にしたい場合は%w、ダブルクォート文字列にしたい場合は%Wを利用します。

%W[pen pineapple apple pen]
=> ["pen", "pineapple", "apple", "pen"]

%w[pen pineapple apple pen]
=> ["pen", "pineapple", "apple", "pen"]
=> :hoge

コマンド入力

コマンド入力を実行する場合は、%xを用います。

%x(date)
=> "Sun Jul 14 07:31:05 JST 2019\n"

正規表現

%r正規表現を扱う事もできます

%rを用いれば、特殊文字エスケープする必要する必要は無くなります。

#通常通りの正規表現オブジェクトの記法だとエスケープが必要
/http:\/\/sample\.com/

#%記法ならエスケープ不要
%r(http://sample.com)

パーセント記法を利用するメリット

通常の記述方法でも、文字列は生成出来ますが、それでも敢えてパーセント記法を用いるメリットは、以下の2点にあります。

可読性の向上

パーセント記法を用いる事で、コードが読みやすくなるというメリットがあります。

例えば、URLを正規表現で特定する際、「http:// で始まる」という条件をそのまま/^http:\/\//と書くと見にくいので、%r|^http://|と書くと見やすくなります。

コード量の削減

パーセント記法を用いる事で、コードを書く量が減らせられるというメリットがあります。

例えば、配列に文字列を格納する際、それぞれにダブルクォート(シングルクォート)を書くとなると、非常に手間が掛かりますが、パーセント記法を用いれば、それを省けます。

参考情報

Rubyで%記法(パーセント記法)を使う - Qiita

Rubyの%(パーセント)を使った記法まとめ - Hack Your Design!

【チートシート】Rubyの%(パーセント)記法の使い方 | shin>>media

Ruby - Ruby パーセント記法の使い道について|teratail

《今日の学習進捗(3年以内に10000時間に向けて)》

実家帰省につき、勉強は少なめ。

Rubysilverの試験が3日後に迫っているので、3連休はそちらの勉強に費やす予定。

改めて基本的な事を何も知らないと実感している。試験に受かったとしても、リファレンス読み返したりして、色んな実装方法を学ぶ必要性を感じた。

それと今回でブログの投稿数が200件に達した。

3年続けるとなると、まだ5分の1にも満たないが、それなりに達成感はある。

とりあえず、これからも淡々と続けていく。

学習開始からの期間 :218
今日までの合計時間:2102h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:1991h
目標との解離:111h
「10,000時間」まで、

残り・・・「7898時間!」