スコーンの開発日記

開発中の学びをまとめていく。

【Ruby】putsとpの違い

putsかpか

Railsのrakeタスクでバッチ処理を実行する際にログを標準出力したい。その場合、 putsp のどちらがよいのか?

irb(main):001:0> p 'abc'
"abc"
=> "abc"
irb(main):002:0> puts 'abc'
abc
=> nil

puts

putsto_s を呼び出す。戻り値は nil

ref.xaio.jp

p

pinspect の結果に改行を加えて出力する。戻り値は引数のオブジェクト。

ref.xaio.jp

比べてみる

例えばループ処理の回数を標準出力したいとする。 以下のようなイメージ。

loop 1/5

puts

loop_count = 5
loop_count.times do |i|
  p "loop #{i + 1}/#{loop_count}"
end

# 実行結果
loop 1/5
loop 2/5
loop 3/5
loop 4/5
loop 5/5
=> 5

p

loop_count = 5
loop_count.times do |i|
  p "loop #{i + 1}/#{loop_count}"
end

# 実行結果
"loop 1/5"
"loop 2/5"
"loop 3/5"
"loop 4/5"
"loop 5/5"
=> 5

putsの方がよさそう。

""が無い putsの方が見やすい。 ログ出力にはputsがよさそう。 あとはもう少し複雑な出力内容だと、エスケープとかも気になってくるらしい…