Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

文字列に%[hoge,piyo]で変数を入れ込むのはバッドノウハウです(白目

以前、ドヤ顔で紹介した文字列に配列で変数を入れ込むテクですが...
目下翻訳中のコーディング規則によるとバッドノウハウらしいです(白目

 # bad
  '%d %d' % [20, 10]
  # => '20 10'

文字列として出力したい場合はsprintf

出力したい場合はsprintfです。
printfじゃぁなんだよ

  # good
  sprintf('%d %d', 20, 10)
  # => '20 10'

  # good
  sprintf('%{first} %{second}', first: 20, second: 10)
  # => '20 10'

文字列を生成したいだけの場合はformat

単にStringのインスタンスを作りたいだけならformatでいけます。

  #good
  format('%d %d', 20, 10)
  # => '20 10'

  # good
  format('%{first} %{second}', first: 20, second: 10)
  # => '20 10'

%{}記法の方が後々読みやすい

どちらの場合も、マジックナンバーを避ける意味でも後者の方が良さ気ですね。
次のように、変数を仕込む事も可能なので使い回しが効きます。

potato = 10
#=> 10

format('Price :: %{value}', value: potato)
#=> "Price :: 10"

potato = 99
#=> 99

format('Price :: %{value}', value: potato)
#=> "Price :: 99"