はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
今回は私が勉強していて気付いた同じ名前のメソッドでも、動作が違うものがあったので紹介していきたいと思います。
あくまでも今回取り上げるのがgets
とputs
ですがほかにもあればコメントで教えていただけると嬉しいです。
gets
の場合
gets
は、使用する環境や対象によって異なる用途を持つメソッドです。大きく分けて以下の2つに分かれます。
Kernel#gets
(標準入力を取得する)
標準入力(ターミナルからの入力)を取得するために使います。以下は基本的な例です。
# 標準入力を取得
input = gets.chomp
puts "入力したのは: #{input}"
標準入力を待機し、chompメソッドで改行文字(\n
)を切り捨てています。
IO#gets
(ファイルやIOオブジェクトから読み取る)
File
オブジェクトや他の IO
オブジェクトに対して使うと、現在のファイルポインタ位置から1行ずつ取得します。
File.open("example.txt", "r") do |file|
line = file.gets
puts "ファイルの内容: #{line}"
end
ブロックを使用して、ファイルの内容を1行ずつ取得しています。
なお、ここでのgets
はキーボード入力とは関係ありません。
puts
の場合
次に、puts
について解説します。
puts
は標準出力に文字列を表示するメソッドですが、実際には2種類の用途があります。
Kernel#puts
(標準出力に表示する)
puts
を通常使うと、標準出力(ターミナル)に文字列を表示します。
puts "Hello, Ruby!"
Progateで勉強する際に最初に扱うのはこのputs
です。
ポイントは以下の通りです。
- 自動的に改行が付加されます。
- 標準出力の目的は、ターミナルへの出力であるということです。
IO#puts
(ファイルやIOオブジェクトに書き込む)
File
オブジェクトや他の IO オブジェクトに対して使うと、出力先がターミナルではなく、ファイルや仮想IO
になります。
File.open("example.txt", "w") do |file|
file.puts "Hello, File!"
end
コードのポイントは以下の通りです。
- 出力先が指定されたIOオブジェクトです。今回の例でいうと
example.txt
にHello,File!
を書き込みます。 - 標準出力(ターミナル)には表示されません。
まとめ
Rubyでは同じ名前のメソッドでも、クラスや対象によって用途が変わることがあります。
gets
と puts
はその典型例で、ターミナルでの操作とファイル操作で異なる使い方ができます。