Rubyには、コンソールへ値を出力するメソッドとして、一般的に次の3つのメソッドのいずれかを使用します。
- putsメソッド
- pメソッド
- printfメソッド
どのメソッドも、コンソールに値を出力すると言う意味では同じですが、それぞれメソッドに渡す引数の違いや、出力される内容に違いがありますので、これらの違いにも本記事は触れていきます。
コンソールアプリを作る時はもちらんのこと、それ以外でも変数の内容を出力したりするデバッグ用途でも、これらのメソッドは大活躍するため、是非とも使い方を覚えておきましょう。
「puts」メソッド
最初は「puts」メソッドの使い方を見ていきましょう。
putsメソッドの使用方法は次の通りです。
puts オブジェクト
引数は、メソッド名の後にスペースを空けて指定します。
通常、メソッドを呼び出すときは「メソッド名(引数)」のように括弧て囲って引数を指定しますが、putsメソッドでは引数を括弧で囲う必要がありません。
引数に指定するオブジェクトは、文字列型以外にも、数値や配列、クラスオブジェクトなどの任意の値が指定でき、実行時にはそれらを文字列表現した値が出力されます。
「puts」メソッドの基本的な使い方
基本的な使い方として、数値と文字をputsメソッドで出力するサンプルコードを作って実行してみましょう。
puts 100
puts "Hello Ruby!"
↓実行結果
100
Hello Ruby!
上の実行結果のように、putsメソッドは引数で指定した値を出力した後、末尾に自動的に改行します。
自動的に改行が行われるため、あえて末尾に改行コードを指定した場合は改行が重複するため無視されます。ただし、文字列の途中に指定した改行コードは有効となりその位置で改行が行われます。
puts "Hello Ruby!\n" #末尾に改行コードを指定
puts "Hello \nRuby!" #文字列の途中に改行コードを指定
Hello Ruby!
Hello
Ruby!
引数で指定する値を、シングルクォーテーション ( ‘ )で囲うと、改行コードの\nやその他の特殊コードはそのまま出力することができます。
puts "ダブルクォーテーション"
puts "Hello Ruby!\n"
puts "Hello\tRuby!"
puts "シングルクォーテーション"
puts 'Hello Ruby!\n'
puts 'Hello\tRuby!'
ダブルクォーテーション
Hello Ruby!
Hello Ruby!
シングルクォーテーション
Hello Ruby!\n
Hello\tRuby!
変数の値を出力する
ここまでputsメソッドに、文字や数値などの値を指定してきましたが、変数名をputsメソッドの引数に指定することで、その変数の中身の値を出力できます。
str = "Hello Ruby!"
puts str
配列の値を出力
putsメソッドの引数に配列オブジェクトを指定すると、配列の各要素の値を出力できます。
この方法は、配列の中身をデバッグで確認したい時になどに非常に便利なので、是非覚えておきましょう。
#配列を宣言
array = ["Ruby", "PHP", "C++", "Java", "C#"]
#putsで出力
puts array
Ruby
PHP
C++
Java
C#
このように、putsメソッドの引数に配列を指定すると、配列の各要素の値が1行ずつ出力されます。
複数の値を出力する
putsメソッドに複数の引数を指定することで、まとめて複数の値や変数の内容を出力することが可能です。
a = "Hello"
b = 100
c = ["Ruby", "PHP", "Java"]
puts a, b, c
Hello
100
Ruby
PHP
Java
「p」メソッド
次は「p」メソッドの使い方を見ていきましょう。構文はputsメソッドと同じで、次のように使用します。
p オブジェクト
引数に指定するオブジェクトは、putsメソッド同様に文字列、数値、配列およびクラスオブジェクトなどの任意の値が指定できます。
「p」メソッドの基本的な使い方
数値と文字をpメソッドで出力するサンプルコードを作って実行してみます。
p 100
p "Hello Ruby!"
100
"Hello Ruby!"
数値はそのまま出力されていますが、上の実行結果を見て分かる通り、文字列の場合、値がダブルクォーテーションで囲われて出力されています。
このように、型情報が出力される点が、putsメソッドpメソッドでの異なる点です。
その他の点については、基本的にはputsメソッドと同じで、変数の中身を出力したり、配列を引数に指定したりして、個々の要素を出力することなどは同じようにできます。
「printf」メソッド
続いて、printfメソッドの使い方について見ていきましょう。
printfメソッドは、C 言語の printf と同じように動作するメソッドで、フォーマットに従い引数を文字列や数値などのオブジェクトを指定して出力します。
printfの構文は次の通りです。
printf( "フォーマット", パラメータ, ... )
1つ目の引数には、 C 言語のprintfメソッドなどで指定するフォーマットを渡します。
2つ目以降の引数には、フォーマットで指定した指示子(%sや%dなど)に対応するパラメータを指定します。指示子を複数指定した場合は、先頭から指定した指示子の順に、対応するパラメータを指定します。
「printf」メソッドの基本的な使い方
次のサンプルコードは、数値型の変数の値をprintfメソッドで出力する例です。これまで紹介したputsやpメソッドとは異なり、printfメソッドでは引数を括弧で囲って指定します。
a = 1000
printf("a=%d", a)
a=1000
このように、数値をprintfメソッドで出力する時は指示子に%dを指定し、2つ目の引数には%dで指定した位置に出力する数値の値を指定します。
文字列をprintfメソッドで出力する場合は、指示子に%sを指定します。
str = "Ruby"
printf("Hello %s", str)
Hello Ruby
この他にもprintfメソッドでは、次の表に示す指示子が使用できます。
指示子 | 意味 |
---|---|
%c | 引数の数値を文字コードとみなして対応する文字を出力 |
%s | 文字列を出力 |
%p | inspectメソッドを呼び出した結果を出力 |
%b, %B | 数値を2進数で出力 |
%o | 数値を8進数で出力 |
%d, %i | 数値を10進数で出力 |
%x, %X | 数値を16進数で出力 |
%f | 999.999のような小数点の表現で数値を出力 |
%e | 9.999e+10のような指数表現で数値を出力 |
%% | %そのものを出力(%のエスケープ シーケンス) |
– | 幅の指定がある場合に出力を左寄せにする。 |
+ | + または –の符号を出力 |
空白 | 数値が負の数のとき–を出力。正の数の時は半角スペースを出力。 |
数値 | 幅を指定する。ここで指定された数だけスペースが埋められた文字が出力される。 |
0 | 幅の指定時に、あまった文字をスペースではなく0で埋める。 |
書式を指定して数値を出力
printfメソッドの特徴として、ゼロ埋め処理とも呼ばれる、数値を指定桁数になるまで左側に0を埋めることや、左詰/右詰などの位置指定での書式が指定が可能です。
次のサンプルコードでは、数値を6桁になるまで左側にゼロを埋めています。
a = 1000
printf("a=%06d", a) #6桁になるまで右詰(ゼロ埋め)
a=001000
改行コードは出力されない
putsやpメソッドでは、末尾に自動的に改行コードが挿入されていますが、printfメソッドは自動的に改行は挿入さません。
次のサンプルコードのように、改行コードを付けずにprintfメソッドを複数回コールすると、改行されずに1行に出力されます。
printf("%s", "Ruby")
printf("%s", "PHP")
RubyPHP
「printf」メソッドで配列は出力できる?
配列を出力する指示子はprintfメソッドには存在しませんが、文字を出力する%s`指示子に配列を指定することで、配列の中身をカンマ区切りで出力することが可能です。
#文字列型の配列
array1 = ["Ruby", "PHP", "C++", "Java"]
printf("array1=%s\n", array1)
#数値型の配列
array2 = [1, 2, 3]
printf("array2=%s\n", array2)
array1=["Ruby", "PHP", "C++", "Java"]
array2=[1, 2, 3]
「puts」「p」「printf」を使い分けよう
Rubyの「puts」「p」「printf」の違いや簡単な使い方を解説してきました。
それぞれのメソッドの特徴を確認して、用途に応じて使い分るようにしましょう。
「p」と「puts」メソッドの違いとしては、pメソッドは引数の値と型情報(文字列や数値型など)も一緒に出力される点で機能が異なります。詳しくは以降のサンプルコードて紹介で詳しく解説しています。