ターミナルから文字を入力
ターミナルから文字を入力できるようにするにはgetsメソッドを使う。
getsメソッド
getsメソッドはユーザーからターミナルへ入力できるようにするメソッド。ユーザーが入力した値を文字列オブジェクトとしてプログラムに渡す。(返り値はユーザーが入力した値の文字列オブジェクト)
getsメソッドが呼ばれるとターミナル画面は入力待ちの状態になる。
そこでキーボードから値を入力してエンターを押すと、getsメソッドは入力した文字をプログラムに返す。
1 2 3 |
input = gets
puts "入力した値は#{input}です"
|
打ち込んだ文字が出力されたあと、「入力した値は"ご自身で入力した文字"です」とターミナル上に表示される。
inputという文字のところに、ご自身がターミナルで打ち込んだ文字が入る。
ここで重要な点は以下の2つ。
- getsメソッドは返り値としてターミナルで入力された文字列を返す
- getsメソッドはターミナルからの入力が終わるまでプログラムの処理を一回止める
getsメソッドの返り値
getsメソッドはターミナルからユーザーに入力を行わせ、入力された値の文字列オブジェクトを返り値として渡す。
上記のsample.rbのソースコードを見るとgetsメソッドの返り値が変数inputに代入されているのがわかる。
プログラムの処理の順番
getsメソッドの特徴として入力が完了するまでプログラムの処理を中断するというものがある。
普通rubyのプログラムは上から下へと流れていく。
1 2 3 |
puts 1
puts 2
puts 3
|
このプログラムを実行すれば上からputsメソッドが呼ばれ、1, 2, 3と順番にターミナルに出力される。
1 2 3 |
puts title
title = "時をかける少女"
|
このソースコードは3行目で変数titleを定義しているのに、1行目でtitleを使おうとしているのでエラーして実行に失敗する。
このようにプログラムとは必ず上から下に順番に実行されるというルールがある。
getsメソッドと処理の流れ
getsメソッドを使うとユーザーがターミナルで入力をするまでそこで一回プログラムを中断する。
よってgetsメソッドより下のソースコードは入力が終わるまでは実行されないということ。
1 2 3 |
input = gets
puts "入力した値は#{input}です" # ユーザーの入力が終わるまで実行されない
|
この特徴によって、getsからの返り値を変数に入れ、その変数をgetsメソッドより後に書かれたソースコードで使うことができるというわけ。