はじめに
Rubyの%
といえば、除算の余り、もしくは%w(a, b, c)
のような配列作成だろうという2つのイメージを持っていました。
ただ、こちらの記事でsimanさんが書かれていたきれいな九九を出力するコードを見ていたところ、%
で幅を指定されており、気になったためRuby2.6.0リファレンスマニュアルを参照し、解読してみました。
この記事が役に立つ方
-
%
は除算の余りだよね -
%w(a, b, c)
で文字列の配列作れるよね - …までしか
%
の使い方を知らないRuby初心者
この記事のメリット
-
%
を用いた幅指定を体得出来る。
環境
- OS: macOS Mojave version 10.14.6
- シェル: zsh
- 使用言語: Ruby 2.6.3
具体的な挙動
言葉で説明するより、コードを変えて見比べると意味がわかります。
今回は%d
%5d
の2つの挙動の違いを見てみることにします。
※d
は指示子。10進数(Decimal Number)を指定。
その他b
で2進数、x
で16進数なども指定出来る。
【例1】文字数の幅が1、指定する幅も1の場合
x = (1..3).to_a
x.each do |i|
print "%d" % [i] #ここの %d で幅が1ということを指定。
end
⇣出力結果
123 # 間にスペースはない。
【例2】文字数の幅が1,指定する幅が5の場合
x = (1..3).to_a
x.each do |i|
print "%5d" % [i] #ここの %5d で幅が5ということを指定。
end
⇣出力結果
1 2 3 # 合計の幅が「5」なので、間に半角スペースが4つ分入る。
【例3】文字数の幅が3,指定する幅が1の場合
x = (101..103).to_a
x.each do |i|
print "%d" % [i]
end
⇣出力結果
101102103 # 指定幅は「1」だが、文字数が「3」なので指定幅を超えて出力される。
【例4】文字数の幅が3,指定する幅が5の場合
x = (101..103).to_a
x.each do |i|
print "%5d" % [i]
end
⇣出力結果
101 102 103 # 半角スペースが2つ分あることで可読性向上。
おわりに
%
だけでも色々な使い方があって面白いですね。
またひとつ勉強になりました。
まずは使えるかどうかは別として、存在を知る。
「なんかあったような気がする…ググろう。」とアンテナが立つ状態に持っていくことが大切ですね!
参考にさせて頂いたサイト(いつもありがとうございます)
rubyで掛け算九九の表示 - simanのブログ
instance method String#% (Ruby 2.6.0)