Hit the books!!

プログラミング学習記録

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を返す。これけっこう忘れがちなのよねぇ。