0
0

More than 3 years have passed since last update.

【Ruby】puts print pメソッドの違い

Last updated at Posted at 2021-07-12

はじめに

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"

pputsのように改行を加えて出力します。
ただし、文字列を出力するとその文字列が ""で囲まれている点が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"

putsprintでは文字列が"abc"と"def"の間で改行して出力されます。
一方でpでは改行文字\nが改行文字のまま出力されます。

なにが違うのか?

  • putsprintは内部的に、引数で渡されたオブジェクトに対してto_sメソッドを呼び出して文字列に変換しています。
  • pto_sメソッドではなく、inspectメソッドを呼び出しています。

結局どう使い分けるのがいいの?

  • putsprint一般ユーザ向けです。
    そしてこの2つのメソッドの違いは改行があるかないか。
  • pは開発者向けです。
    なぜならinspectメソッドは開発者にとって役立つ情報を返すように実装されているためです。

参考書籍

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0