【Ruby】putsとpの違い
putsかpか
Railsのrakeタスクでバッチ処理を実行する際にログを標準出力したい。その場合、 puts
と p
のどちらがよいのか?
irb(main):001:0> p 'abc' "abc" => "abc" irb(main):002:0> puts 'abc' abc => nil
puts
puts
は to_s
を呼び出す。戻り値は nil
。
p
p
は inspect
の結果に改行を加えて出力する。戻り値は引数のオブジェクト。
比べてみる
例えばループ処理の回数を標準出力したいとする。 以下のようなイメージ。
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
がよさそう。
あとはもう少し複雑な出力内容だと、エスケープとかも気になってくるらしい…