【Ruby】ターミナルへの出力で使われるputs,print,p,ppメソッドの違い

Ruby

こんにちは、moegi (@moegi_web) です。
今回はターミナルへの出力でよく使われるputsメソッド,printメソッド,pメソッド,ppメソッドの違いについてまとめました。

puts,print,p,ppの違い

メソッド 改行 戻り値 文字列変換
puts 改行される nilになる to_s
print 改行されない nilになる to_s
p 改行される 引数のオブジェクト inspect
pp 整形される 引数のオブジェクト inspectに似た方法

引数:関数やプログラムに渡す値のこと
nil:存在しない状態を表す
to_s:文字列オブジェクトに変換するメソッド
inspect:オブジェクトや配列をわかりやすい文字列で返すメソッド

putsメソッド

putsメソッドは改行して変数の内容やメソッドの戻り値をターミナルに出力します。
戻り値はnilになります。

array = [1, 2, 3]
puts array
=> 1
=> 2
=> 3

printメソッド

printメソッドは改行されず変数の内容やメソッドの戻り値をターミナルに出力します。
戻り値はnilになります。

array = [1, 2, 3]
print array
=> [1, 2, 3]

pメソッド

pメソッドは改行して変数の内容やメソッドの戻り値をターミナルに出力します。引数で渡されたオブジェクトそのものがメソッドの戻り値になります。
文字列を出力すると””で囲まれ、デバッグ時によく使われる。

num_string = '1'
p num_string
=> "1"

ppメソッド

ppメソッドは複雑な配列、ハッシュを見やすくして出力します。
引数で渡されたオブジェクトそのものがメソッドの戻り値になります。

pp Encoding.aliases.take(2)
=> [["BINARY","ASCII-8BIT"],
# ["CP437","IBM437"],
# ["CP720","IBM720"]

pメソッドとputsメソッドの使い分けについて

pメソッドとputsメソッドの大まかな使い分けについてです。
pメソッドの方が開発しているときに便利な情報がたくさん出力されるデバッグ用のメソッド。
putsメソッドは単純に標準出力するメソッドです。

配列やシンボル、また他のオブジェクトなどを調べるときに違いが顕著に現れます。
=> が出力を表す

array = [1, 2, 3]
p array # 配列であることがわかりやすい
=> [1, 2, 3]
puts array
=> 1
=> 2
=> 3

symbol = :foo
p symbol # シンボルであることがわかりやすい
=> :foo
puts symbol
=> foo

num_string = '1' #文字列であることがわかりやすい
p num_string
=> "1"
puts num_string
=> 1

foo = nil
p foo
=>nil
puts foo
=> (何も表示されずに改行)

まとめ

学習を進めていくうちにあれ、pとputsってどう違ったんだっけ?と思ったのでまとめました。
しっかり覚えたいです。

コメント

タイトルとURLをコピーしました