「puts、print、p、pp」は出力用のメソッドで使用されますが、改めて違いに関して整理したいと思います。
puts
- オブジェクトを出力後に改行する。
- Kernel.#puts(Ruby 3.0)
sample.rb
puts 'hellow', 'world'
# => hellow
# => world
- オブジェクトを出力後に改行しない。
- Kernel.#print(Ruby 3.0)
sample.rb
print 'hellow', 'world'
# => hellowworld
p
- オブジェクトを出力後に改行する。
- 引数で渡されたオブジェクトがそのまま戻り値になる。
- Kernel.#p(Ruby 3.0)
sample.rb
puts '1' # => 1
p '1' # => "1"
puts 1 # => 1
p 1 # => 1
puts '' # => (空行)
p '' # => ""
pp
- オブジェクトを出力後に改行する。
- 引数で渡されたオブジェクトがそのまま戻り値になる。
- pメソッドとは違い、オブジェクトの構造を表示する際に、適当に改行を補って見やすく整形してくれる。
- Kernel.#pp(Ruby 3.0)
sample.rb
p [{ a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }]
# => [{:a=>"aaa", :b=>"bbb"}, {:a=>"aaa", :b=>"bbb"}, {:a=>"aaa", :b=>"bbb"}, {:a=>"aaa", :b=>"bbb"}]
pp [{ a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }, { a: 'aaa', b: 'bbb' }]
# => [{:a=>"aaa", :b=>"bbb"},
# {:a=>"aaa", :b=>"bbb"},
# {:a=>"aaa", :b=>"bbb"},
# {:a=>"aaa", :b=>"bbb"}]
所感
- 何気なく使用していたメソッドを改めて見ると、用途に合わせて使い分けた方が良いと思った。
- 他にも戻り値が「nil」か「引数のオブジェクト」の違いがあり、呼び出すメソッドも「to_s」か「inspect」の違いもあったが、入門としてはここまで良いかなと思う。