【結論】
・文字列(Stringクラスのインスタンス)を生成する際、通常は""
や''
で文字を囲って、文字列と認識させる必要がある
・パーセント記法とは、""
や''
以外の記号などで文字列を囲って、文字列と認識させる記法
・可読性の向上やコード量の削減といった目的で利用されるケースが多い
【目次】
- パーセント記法について
- パーセント記法の種類
- ダブルクォート文字列・シングルクォート文字列
- シンボル
- 配列
- コマンド入力
- 正規表現
- パーセント記法を利用するメリット
- 参考情報
- 《今日の学習進捗(3年以内に10000時間に向けて)》
【本題】
パーセント記法について
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の%(パーセント)を使った記法まとめ - 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時間!」