【Ruby】getsメソッドを徹底解説!

Ruby

getsメソッドとは

getsメソッドはユーザーがキーボードで入力した値を文字列として取得するメソッドです。 返り値はユーザーが入力した値の文字列オブジェクトになります。

getsメソッドを使ってみよう

getsメソッドが実行されるとターミナルがコマンド入力待ちの状態に変わります。
ユーザーが何らかの値をキーボードから入力し、エンターを押すとその文字が文字列オブジェクトとしてコンピューターに返ってきます。

getsメソッド
上の動画のようにgetsメソッドが呼ばれるとターミナルが入力待ちの状態になることがわかります。
するとユーザーが自由にキーボードから文字を入力できます。
ユーザーがエンターキーを押すまでこの状態が維持されます。
入力されて送られてきた値は文字列オブジェクトとして変数に代入することもできます。

また必ず送られてきた文字列オブジェクトの後に改行が入ります。

文字列オブジェクトの後に改行が入る
このままだとちょっと表示がよろしくありませんね。
こういう改行を取り除きたい時はどうしたら良いでしょう。

chompメソッド

chompメソッドは文字列オブジェクトの末尾についた改行を取り除き、新しい文字列を返してくれるメソッドです。
gets.chompとすることにより改行なしの状態で文字列オブジェクトが返ってきます。

改行なしが返る
このように改行なしで表示されます。

注意すべき点

getsメソッドを使用する時に注意すべき点は必ず文字列オブジエクトとして送られるということです。
つまり数値を入力しても数値オブジェクトにはならないということです。

getsメソッド
このように返ってくるのは文字列オブジェクトなので入力した「1」という数値は「1」という文字として認識されるため計算式にするとエラーが出てしまいます。
では数値オブジェクトとして返ってきて欲しい時にはどうしたら良いでしょう。

to_iメソッド

to_iメソッドは文字列オブジェクトに対して使用すると数値オブジェクトに変換してくれるメソッドです。

ruby
1
2
3
4
5
6
7
8
9
num = "1"
p num
"1"
=> "1"

num = num.to_i
p num
1
=> 1

では数値以外の文字列オブジェクトに対し、to_iメソッドを使うとどうなるのでしょうか? 
この時数値以外の文字列オブジェクトは全て「0」に変換されます。

0に変換
getsで数値オブジェクトを取得したい時はto_iメソッドを使いましょう。

今回学習したgetsメソッドは標準入力が扱えるメソッドの一つです。
では標準入力とは一体なんでしょう?

標準入力

キーボードから入力した値をコマンドへ渡すことを標準入力と言います。
Rubyでは標準入力オブジェクトというものがあらかじめ用意されています。

それが$stdinという変数とSTDINという定数です。
この2つのオブジェクトに対しgetsメソッドを使用しても同じ結果が得られます。

STDIN
ちなみに「stdin」は「Standard Input」の略です。
文字通り標準入力という意味ですね。

この標準入力からの値を文字列としてget(取り出す)しています。
ちなみにgetsの「s」は「string」を表します。
つまり「gets」は「get string」という意味だったんですね。

「puts」が「puts string」の略と同じです。
なのでputsも末尾に改行が入ったと同様、getsも末尾に改行が入ったというわけです。

そういえばputsメソッドもレシーバーを持たず、メソッド単体で使っていましね。
getsが標準入力メソッドであることに対し、putsは標準出力メソッドです。
ですので同じように標準出力オブジェクトというものがあらかじめ用意されています。

標準出力

それが$stdoutという変数とSTDOUTという定数です。
これが何の略かはもうお分かりですね。
そうです、「Standard Out」の略です。

STDOUT
このように$stdoutオブジェクトにputsメソッドを使っても同じように出力されます。
ターミナルに出力されるのはあらかじめ$stdout変数で定義されているからになります。
これを指定したファイルの中に記述するよう指定すればターミナルではなくファイル内に出力させることも可能です。

getsがターミナルで入力待ちになったのは$stdinとSTDINのオブジェクトに対し、ターミナルから入力された値を取ってくるようあらかじめ設定されているためです。

ここまで知っておくと何でターミナルに出力されたり、ターミナルに入力された値を取り出せるのかがよくわかりますね!

まとめ

getsメソッドはターミナルからキーボードで入力された値を文字列として取得するメソッドだよと覚えておきましょう!