はじめに
Rubyの知識を深く学びたい!と思い、『プロを目指す人のためのRuby入門』を使い学習を始めました。新たな学びや気づきをアウトプットします。
今日のテーマは、ターミナルへの出力でよく使われる「puts・printメソッド・pメソッドの違いってなんだろう?」についてです。
3つのメソッドを使って出力し違いを比べてみよう
-
puts
を使った出力
irb(main):001:0> puts 123
123
=> nil
irb(main):002:0> puts 'abc'
abc
=> nil
-
print
を使った出力
irb(main):003:0> print 123
123=> nil
irb(main):004:0> print 'abc'
abc=> nil
puts
と違う点は改行されていない点にあります。
-
p
を使った出力
irb(main):001:0> p 123
123
=> 123
irb(main):002:0> p 'abc'
"abc"
=> "abc"
p
はputs
のように改行を加えて出力します。
ただし、文字列を出力するとその文字列が ""
で囲まれている点がputs
と異なります。
また、p
は引数で渡されたオブジェクトそのものがメソッドの戻り値になります。
次は、改行文字を含む文字列をそれぞれのメソッドに渡してみます。
irb(main):001:0> s = "abc\ndef"
=> "abc\ndef"
irb(main):002:0> puts s
abc
def
=> nil
irb(main):003:0> print s
abc
def=> nil
p s
irb(main):004:0> p s
"abc\ndef"
=> "abc\ndef"
puts
やprint
では文字列が"abc"と"def"の間で改行して出力されます。
一方でp
では改行文字\n
が改行文字のまま出力されます。
なにが違うのか?
-
puts
とprint
は内部的に、引数で渡されたオブジェクトに対してto_s
メソッドを呼び出して文字列に変換しています。
* `p`は`to_s`メソッドではなく、`inspect`メソッドを呼び出しています。
結局どう使い分けるのがいいの?
-
puts
とprint
一般ユーザ向けです。
そしてこの2つのメソッドの違いは改行があるかないか。
* `p`は開発者向けです。
なぜなら`inspect`メソッドは開発者にとって役立つ情報を返すように実装されているためです。