Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyのputs・print・pの違いとは?出力メソッドの使い分けを徹底解説

Rubyには、画面に何かを出力するための方法がいくつかあります。中でも特によく使われるのが、以下の3つのメソッドです。

  • puts
  • print
  • p

しかし、これらは一体どう違うのでしょうか?そしてどんな場面でどれを使えばよいのか?この記事では、それぞれの特徴と使い分けのポイントを詳しく解説します。

改行なしで出力する方法

ユーザーに見せるために画面へ何かを出力したいときは、通常putsを使用します。

例:

puts "Hello there!"

putsは、実行するたびにメッセージの末尾へ自動的に改行を追加します。

もし改行したくない場合は、printを使いましょう。

例:

print 123

次にprintで何かを出力すると、前回の出力と同じ行に続けて表示されます。

例:

print 123
print 456
print 789

# 出力結果
123456789

一方、putsを使うと:

puts 123
puts 456
puts 789

# 出力結果
123
456
789

すべてのメッセージがそれぞれ独立した行に表示されますね。

配列の扱い方の違い

putsは配列に対しても独自の振る舞いをします。

例:

puts [1,2]
# 出力結果
1
2

print [1,2]
# 出力結果
[1,2]

putsは配列の要素を1行ずつ展開して表示するのに対し、printは配列のまま出力します。

nilを含む配列に注意

もう一つ重要な違いがあります。putsは、あらゆるオブジェクトを文字列へ変換しようとします(内部的にto_sを呼び出します)。

なぜこれが問題になるのか?nilを含む配列をputsで出力すると、nilが空文字列に変換され、意図しない空行が表示されてしまうからです。

例:

puts [1,nil,nil,2]
# 出力結果
1


2

ここまでを整理すると、putsprintに共通する特徴は次のとおりです。

  • 空文字列になったとしても、すべてを文字列に変換して出力する

そしてputsだけが持つ特徴はこちらです。

  • メッセージの末尾に必ず改行を追加する
  • 配列の要素を1行ずつ表示する

pによるデバッグ出力

では、putsとpの違いは何でしょうか?

pは、オブジェクトのより「生(raw)」な状態をそのまま表示するメソッドです。

例:

> puts "Ruby Is Cool"
Ruby Is Cool

> p "Ruby Is Cool"
"Ruby Is Cool"

putsでは文字列の中身だけが表示されますが、pでは引用符付きの文字列リテラルとして表示されます。

pは何に役立つのでしょうか?答えはデバッグです。

通常は目に見えない改行文字などの特殊文字を確認したいときや、変数に入っている値が本当に正しいか確かめたいときに、pを使います。

戻り値の違い

さらに重要な違いとして、戻り値が異なる点が挙げられます。

  • putsは常にnilを返す
  • pは渡されたオブジェクトそのものを返す

これはやや技術的な違いですが、メソッドの最終行で変数をputsしており、そのメソッドの戻り値を利用している場合に思わぬバグを引き起こすことがあります。

例:

def numbers
  puts 123
end

numbers
# => nil

この例では、numbersメソッドは画面に123を表示しますが、戻り値はnilになってしまいます。

次のように書くと:

result = numbers

resultには123ではなくnilが代入されてしまいます。

しかし、putsの代わりにpを使えば、渡した値がそのまま返されるため、意図したとおりに動作します。

整形出力ならpp

Rubyには、さらにもう一つ出力用のメソッドが存在します。それがpp(pretty print)です。

pppと似ていますが、ネストの深いハッシュや大きな配列を、インデント付きの見やすい形式で出力してくれる点が特徴です。

なお、古いバージョンのRuby(2.4以前)では、このメソッドを使うために事前にrequire 'pp'を読み込む必要がある点に注意しましょう。

まとめ

この記事では、Rubyにおけるputs、print、p(そしてpp)の違いについて学びました。

  • puts:末尾に改行を追加し、配列を1行ずつ表示。常にnilを返す
  • print:改行なしで連続出力できる
  • p:オブジェクトの生の状態を表示するデバッグ向けメソッド。渡したオブジェクトをそのまま返す
  • pp:大きなデータ構造を見やすく整形して表示

さあ、ここからは練習の時間です。

新しいことを学んだらすぐに手を動かして試すことで、知識は自分のものとして定着します。逆に練習を怠ると忘れてしまい、スキルアップにもつながりません。ぜひ実際にコードを書いて、それぞれのメソッドの挙動の違いを体感してみてください。

  1. VRとARの違いを徹底解説!仮想現実と拡張現実の基礎知識

    VRとAR、その違いを正しく理解していますか?ブロックチェーンやバーチャルリアリティ(VR)といった革新的なテクノロジーは、すでに世界中に浸透しています。多くの有名企業が自社の製品やアプリケーションにこれらの技術を取り入れており、一般の人々も日常的にそれらを体験する時代となりました。しかし、自分が使っている技術の概念や仕組みを正しく理解している人は、果たしてどれほどいるでしょうか。テクノロジーの分野で最も混乱しやすいのが、「拡張現実(AR)」と「仮想現実(VR)」の違いです。多くの人はこの2つの用語を同じ意味で使っています。本記事では、両者の違いをわかりやすく解説します。仮想現実(VR)とは?

  2. Windows 10とWindows 11の違いを徹底比較!アップグレードすべきか判断するポイント

    Microsoft(マイクロソフト)は、数々の新機能と改善点を盛り込んだ最新OS「Windows 11」をリリースしました。一方で、これまで数多くのパッチやアップデートが適用されてきたWindows 10は、新しいWindows 11よりも安定したOSと言えます。Microsoftによると、Windows 10のサポートは2025年以降に終了する予定のため、Windows 11へアップグレードするか、Windows 10を使い続けるかを検討する時間は十分にあります。この記事では、Windows 10とWindows 11の性能・機能・改善点を比較し、新しいOSへ移行すべきか、それともWindo