LoginSignup
1
2

More than 3 years have passed since last update.

【見慣れない%記法】RubyのStringクラスのインスタンスメソッド`%`で幅を指定する方法

Last updated at Posted at 2019-11-04

はじめに

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)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2