👠

【paiza】入力を受け取る際のメソッドで、readlinesを使ってみた

2024/09/01に公開

はじめに

paizaC問題の標準出力を解いている中で、IOクラスに定義されているreadlinesメソッドを使った解き方を学びました。readlinesメソッドはRubySilverの勉強をしていた際に学んだメソッドでしたが、これまで使用したことがないメソッドでした。
今回paizaの問題で使用してみて、今後も活用できそうなメソッドかなと感じたので記事にしました。
参考になりましら幸いです。

適用したpaizaの問題

今回readlinesメソッドを適用できたのは、こちらの問題です。

  • 入力では、10 個の文字列 S_1, S_2, S_3, ..., S_10が改行区切りで与えられています。
  • 出力は、その10個の文字列を1 行で出力する問題です。

当初自力で解いた回答が下記になります。

s = []
10.times do
  s << gets.chomp
end

puts s.join(' ')

この問題では模範回答がないため、ChatGPTにreadlinesメソッドを使用して回答を作成してもらいました。

strings = readlines.map(&:chomp)
puts strings.join(' ')

readlinesメソッドを使用した場合の方が、コード数が明らかに減っていることがわかります。

IO#readlinesメソッド / IO#readlineメソッド/ Kernel.#getsメソッド

改めて今後paiza等で、readlinesメソッドが使用できる可能性が高いと感じました。
普段入力を受け取る際には、getsメソッドを使用していたので IO#readlinesメソッド / IO#readlineメソッド/ Kernel.#getsメソッドの3つの処理の仕方を比較してみました。

メソッド クラス・モジュール 処理
readlines IOクラス 全ての入力を1つの配列にまとめて返す。標準入力から全ての行を読み込み、それぞれの行を配列の要素として返す。 ファイルの終わりに達していれば空配列 [] を返す。
readline IOクラス 自身から1行読み込んで、その文字列を返す。文字列の終端に到達した時には例外 EOFError を発生させる。
gets Kernelモジュール 1行の入力を受け取るメソッド。標準入力から1行を取得して、文字列として返す。ファイルの最後の行に到達すると、nilが返される。

出力時の処理として、readlinesメソッドは配列、getsメソッドは文字列として返すという特徴がありました。

readlineメソッドは、1行読み込んで文字列として返す点はgetsメソッドと似ていると感じましたが、
文字列の終端に到達した時には例外 EOFErrorを発生させるというところが大きな違いと感じました。
(getsメソッドはnilを返すため)

それぞれの特徴を改めて確認することで、自分の入力を受け取る際のメソッドの引き出しを理解できた気がします。
参考にした記事が大変わかりやすかったので、わかりにくい点はこちらもご参照いただけますと幸いです。
最後までご覧いただきありがとうございました。

参考

Discussion