p, pp, puts, printメソッドまとめ(Ruby3.0.0)
ppメソッドがrequireしなくても使えるようになったということを知ったので(というかppメソッドを知らなかった)、初心者の私でもこれまで何度となく使ってきた出力系メソッドについてまとめてみます。
最初に結論↓↓
まとめ
- printは改行されない
- puts, printは
"
がつかない、nilを返す - pはそのまま
- 複雑なデータではppが便利
比較
改行されるputsと改行されないprint
まずはputsとprintの比較。
puts 'Hello' puts 'World!' puts 'Hello World!' # 出力結果 Hello World! Hello World!
print 'Hello' print 'World!' print 'Hello World!' # 出力結果 HelloWorld!Hello World!
printは改行されない。
"
がつくpと"
がつかないputs, print
私が一番使うpメソッドと比べてみる。pデバッグ用とのこと。
p 'Hello' p 'World!' p 'Hello World!' # 出力結果 "Hello" "World!" "Hello World!"
putsとprintは"
がついてなかったところが違う。
puts 'Hello' puts 'World!' puts 'Hello World!' # 出力結果 Hello World! Hello World!
inspectメソッド
pやppではinspectメソッドが呼び出されるようになっている。 inspectメソッドは文字列を人間の読みやすい形にしてくれる。
puts 'Hello'.inspect # 出力結果 "Hello"
お、"
があらわれた!
JSONなどのデータを扱うときはppだと改行されて見えやすい
ここでppの登場です。こういうデータがあるとする。
friends = {:name => 'Alice', :age => 12}, {:name => 'Bob', :age => 72}, {:name => 'Carol', :age => 36}
pとppを比較する。
p friends pp friends # pの出力結果 [{:name=>"Alice", :age=>12}, {:name=>"Bob", :age=>72}, {:name=>"Carol", :age=>36}] ## ppの出力結果 [{:name=>"Alice", :age=>12}, {:name=>"Bob", :age=>72}, {:name=>"Carol", :age=>36}]
改行してくれて便利そうだ〜。
戻り値の比較
戻り値にも違いがあります。
irb(main):001:0> puts 'Hello' Hello => nil irb(main):002:0> print 'Hello' Hello=> nil irb(main):003:0> p 'Hello' "Hello" => "Hello" irb(main):004:0> pp 'Hello' "Hello" => "Hello"
putsとprintはnilを返す。これけっこう忘れがちなのよねぇ。