すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

Ruby

【Ruby】 getsメソッドの使い方と特徴をマスターしよう!

ぴっかちゃん
ぴっかちゃん

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

irb | getsの使用例
1
2
3
4
5
irb(main):001:0> inputs = gets
入力します。
=> "入力します。\n"
irb(main):002:0> inputs
=> "入力します。\n"

上記のようにgetsメソッドが実行されると、ターミナルがコマンド入力待ちの状態になるので、値を入力すると変数inputsにその入力した値を格納することが出来ます。

getsメソッドの使い方

この章では、getsメソッドの使い方について解説します。

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

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

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

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

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

chompメソッド

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

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

注意すべき点

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

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

to_iメソッド

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

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」が「put string」の略と同じです。
なのでputsも末尾に改行が入ったと同様、getsも末尾に改行が入ったというわけです。

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

標準出力

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

STDOUT

このように$stdoutオブジェクトにputsメソッドを使っても同じように出力されます。 ターミナルに出力されるのはあらかじめ$stdout変数で定義されているからになります。

これを指定したファイルの中に記述するよう指定すればターミナルではなくファイル内に出力させることも可能です。
getsがターミナルで入力待ちになったのは$stdinとSTDINのオブジェクトに対し、ターミナルから入力された値を取ってくるようあらかじめ設定されているためです。

ここまで知っておくと何でターミナルに出力されたり、ターミナルに入力された値を取り出せるのかがよくわかりますね!Rubyの用語やコードの読み方を初歩から学びたい方は、こちらの書籍も参考になります。

この記事のまとめ

  • getsメソッドは、ターミナルからキーボードで入力された値を文字列として取得するメソッドのこと
  • 入力された値を数値オブジェクトとして取得する場合は、to_iメソッドを使おう
  • キーボードから入力した値をコマンドへ渡すことを標準入力と呼ぶ