🪬

【Ruby超入門】print、puts、pの違い

に公開

今回は Ruby の print 、 puts 、 p のメソッドの違いについて紹介したいと思います。

Ruby には変数や値などをコンソールに出力するためのメソッドとして、「print」「puts」「p」などのメソッドが用意されています。

「print」と「puts」と「p」のメソッドはいずれも引数に渡された値などを出力しますが、微妙に挙動が違います。

主な違い

主な違いとしては以下の様な点があります。

  • 改行するかどうか
  • オブジェクトの情報も出力するか

「puts」と「p」は出力した後に改行するのですが、「print」は改行しません。
「puts」と「p」はいずれも改行するのですが、「p」メソッドはオブジェクトの情報も出力します。

printメソッド

  • 引数を順番に出力する
  • 改行をしない
  • 文字列以外のオブジェクトは、to_s メソッドによって文字列に変換される
  • 改行を入れる場合は改行文字(\n)を付ける
  • 戻り値は nil

print メソッドはオブジェクトの出力後に改行を加えません。
また引数が数値などの場合は文字列に変換されます。

print 123, 'abc'
print "abc\ndef"

#=> 123abc
#=> abc
#=> def


array = [111, 222, 333]
print array

#=> [111, 222, 333]


hash = {"name" => "山田", "age" => 25}
print hash

#=> {"name" => "山田", "age" => 25}

putsメソッド

  • 引数を順番に出力する
  • 改行をする
  • 文字列以外のオブジェクトは、to_s メソッドによって文字列に変換される
  • 配列の場合は要素を順番に出力する
  • 戻り値は nil

puts メソッドはオブジェクト出力後の末尾に改行が入ります。
また配列の場合は中の要素を出力します。

puts 123
puts 'abc'
puts "abc\ndef"

#=> 123
#=> abc
#=> abc
#=> def


array = [111, 222, 333]
puts array

#=> 111
#=> 222
#=> 333


hash = {"name" => "山田", "age" => 25}
puts hash

#=> {"name" => "山田", "age" => 25}

pメソッド

  • 引数を順番に出力する
  • 改行をする
  • オブジェクトを見やすいように出力する
  • \n や\t などのエスケープ文字もそのまま出力する
  • 主にデバッグで使用される

p メソッドは主にデバック用で、オブジェクトと型表現も含めた形の文字列を出力し、末尾に改行が入ります。
文字列を出力するとダブルクォートで囲まれますが、数値はそのまま出力されます。
p メソッドは内部的に inspect メソッドを呼び出しています。

p 123
p 'abc'
p "abc\ndef"
"abc\ndef".inspect

#=> 123
#=> "abc"
#=> "abc\ndef"
#=> "\"abc\ndef\""

array = [111, 222, 333]
p array

#=> [111, 222, 333]


hash = {"name" => "山田", "age" => 25}
p hash

#=> {"name" => "山田", "age" => 25}

まとめ

以上が Ruby の「print」「puts」「p」メソッドの違いでした。

ここまでの内容を簡単にまとめると下記の内容になります。

  • 「print」は、引数を文字列にして出力し、改行をいれない
  • 「puts」は、引数を文字列にして出力し、改行をいれる
  • 「p」は、引数を読み取りやすい形式で出力し、改行をいれる。デバッグでよく使用する。

似た様な出力系のメソッドでも微妙に違いがあってなかなか難しかったです。

また、他の出力系のメソッドもあるので気になる人は調べて見てください。

参考書

Discussion