'%02d' % 2
ruby で 数字の 2 を '02' と記述したい時、'%02d' % 2
のような構文を書きますよね。
引数に対して 0埋めをおこなってstringで返すという方法ですが、こちらの % とか 02 とか d って一体なんなんでしょうか?
% って何?
ruby では % という記法に様々な意味があります。
- 剰余を表す「%」
例: 5 % 3 => 2
- Stringクラスの「%」演算子
例: "%02d" % 2 => "02"
- リテラル記法の「%」演算子
例: %w(dog cat monkey) => ["dog", "cat", "monkey"]
- コマンドラインへの入力を示す
例: %x[ DATE ] => "2020年 6月24日 水曜日 09時31分57秒 JST\n"
上記のような種類があります。
参考: Rubyで使われる記号の意味(正規表現の複雑な記号は除く)
先に示した、'%02d' % 2
という構文は、上記の例でいうと 2. Stringクラスの「%」演算子
にあたりますね!
02 とか d って一体なんなんでしょうか?
d は引数の型を示す**「指示子」**の中の一つです。
d は 10進数の整数 (Decimal number) を表しています。
指示子は他にも、文字列を表すものや浮動小数点を表すもの、指数表現を表すものなどがあります。
02 は 0 と 2 に分解することができ、それぞれ**「フラグ」と「幅」**を示しています。
**「フラグ」**にもいくつか種類があるのですが、 0 は余白を 0で埋めるという意味になります。
**「幅」**はそのまま、出力時の長さを指定します。
これらをまとめると、'%02d' % 2
という記法は、
'%0(余白は0で埋めてくださいね〜)2(出力時の長さは2ですよ)d(引数を10進数の整数で表してくださいね' %(Stringクラスの%演算子ですよ〜) 2(引数は2ですよ!)
という意味が込められている事になります。
おわりに
引数は配列で渡す事もできますので、
**「10進数で表している色コードを16進数の色コードに変換したいよ」**という時には、
'%02x%02x%02x' % [255, 255, 255] => "ffffff"
と書く事ができます!