🍇
「puts、print、p」の違いについて【Ruby入門】
はじめに
Rubyの勉強を始めると最初に必ず使うメソッド「putsメソッド」
そして後々知ることになる「printメソッド」「pメソッド」
大体できることは同じなのですが、微妙に違いがありました。
puts
putsメソッドはオブジェクト出力後に改行して、変数の内容やメソッドの戻り値を出力します。
あと、putsメソッド自身の戻り値は「nil」
puts 12345
12345
=> nil
puts 'Hello!!'
Hello!!
=> nil
# 改行文字「\n」が使える
puts "abc\ndef"
abc
def
=> nil
printメソッドはオブジェクト出力後に改行されない。
putsメソッドと同じく、printメソッド自身の戻り値も「nil」
print 12345
12345=> nil
print 'Hello!!'
Hello!!=> nil
# 改行文字「\n」が使える
print "abc\ndef"
abc
def=> nil
p
pメソッドは、putsメソッドと同じくオブジェクト出力後に改行される。
文字列を出力すると、ダブルクオート("")で囲まれて出力される。
ここが1番の違いですが、pメソッドは渡されたオブジェクトそのものがメソッドの戻り値になる。
そして改行文字(\n)がそのまま出力される。
p 12345
12345
=> 12345
p 'Hello!!'
"Hello!!"
=> "Hello!!"
# 改行文字「\n」が使えない
p "abc\ndef"
"abc\ndef"
=> "abc\ndef"
配列を渡した場合の違い
配列でも上で説明した違いが現れます。
a = [1, 2, 3]
# putsメソッドの場合
puts a
1
2
3
=> nil
# printメソッドの場合
print a
[1, 2, 3]=> nil
# pメソッドの場合
p a
[1, 2, 3]
=> [1, 2, 3]
まとめ
それぞれの違いがこんな感じです。
メソッド | 出力後の改行 | 配列の表示 | 呼び出すメソッド | 戻り値 |
---|---|---|---|---|
puts | あり | 要素ごとに改行 | to_s | nil |
あり | 改行しない | to_s | nil | |
p | なし | 改行しない | inspect | 引数のオブジェクト |
ちなみに、「to_sメソッド」は、オブジェクトの内容を文字列に変換するメソッドのこと。
「inspectメソッド」は、オブジェクトの内容を文字列に変換し、開発者にわかりやすい感じに出力してくれます。(今回だとダブルクオート""で囲まれていた)
両者の違いが知りたい方は、はじめてのRuby!inspectとは!?使い方を徹底解説!をどうぞ。
使い分けとしては以下のような感じでしょうか。
・putsメソッドは、改行したい時に使う
・printメソッドは、改行したくない時に使う
・pメソッドは、デバックなどでより詳しい内容を知りたい時に使う
Discussion