getsメソッドを利用して案内表示をだす
今回はgetsメソッドを試す。
目次
getsメソッド
getsはIOクラスのインスタンスメソッド。
定数ARGVはコマンドと同時に入力した値を受け取る。
それに対してgetsメソッドはコード内のgetsが使われている部分で入力を待つ。
Rubyリファレンスマニュアルは次のとおり。
Rubyリファレンスマニュアル Class IO
インスタンスメソッド gets
https://docs.ruby-lang.org/ja/latest/class/IO.html
getsを使ってコードを書く
コードを書いて試す。
test.rb
puts "種目を入力して下さい" event = gets p event
上のコードを実行すると次のように表示される。
種目を入力して下さい
getsが入力を待っている状態。
表示に対して、男子エイト、と入力してみる。
ターミナル/PowerShell
種目を入力して下さい 男子エイト
実行結果
種目を入力して下さい 男子エイト "男子エイト\n"
男子エイトと入力すると上のような実行結果になる。
上のコードでは出力にp
メソッドを使っているのでオブジェクトの詳細がわかる。
見てのとおり最後に\n(改行)がついた文字列になっている。
getsは受け取った値を改行つきの文字列にする。
getsを案内に利用する
getsを利用して案内表示を出してみる。
test.rb
events = [ "女子シングルスカル", "男子シングルスカル", "女子クォドルプル", "男子エイト" ] puts "次の中から種目を選んで、その番号を入力して下さい。" events.each_with_index do |event,index| puts "#{index}: #{event}" end print "番号(半角):" event_index = gets.to_i puts "これから#{events[event_index]}のCSVファイルを作成します。"
上のコードを実行すると次のようにターミナル/PowerShellに表示される。
次の中から種目を選んで、その番号を入力して下さい。 0: 女子シングルスカル 1: 男子シングルスカル 2: 女子クォドルプル 3: 男子エイト 番号(半角):
2と入力してreturn/Enterキーを押す。
ターミナル/PowerShell
次の中から種目を選んで、その番号を入力して下さい。 0: 女子シングルスカル 1: 男子シングルスカル 2: 女子クォドルプル 3: 男子エイト 番号(半角):2
実行結果
次の中から種目を選んで、その番号を入力して下さい。 0: 女子シングルスカル 1: 男子シングルスカル 2: 女子クォドルプル 3: 男子エイト 番号(半角):2 これから女子クォドルプルのCSVファイルを作成します。
コードの説明。
- ボート競技の種目名を配列に格納する
- putsメソッドで種目名を選択するよう案内表示を出す
- each_with_indexメソッドを使って配列eventsからインデックスつきで種目名一覧を表示させる
- printメソッドで番号入力を促す表示を出す
- printメソッドは改行がつかないので次の行のコード(gets)がつづいて読み込まれる
- getsで入力値を受ける
to_i
メソッドは文字列(String)オブジェクトを整数(Integer)オブジェクトに変換するメソッド
- 選ばれた種目名を含んだ案内をputsメソッドで表示する
- 入力値をインデックスとして配列から種目名を取りだす
to_iメソッドは文字列オブジェクトに使うメソッド。
Rubyリファレンスマニュアル
Stringクラス インスタンスメソッド to_i
https://docs.ruby-lang.org/ja/latest/class/String.html
each_with_indexメソッドは要素とインデックスを返すメソッド。
リファレンスマニュアルは次のとおり。
Rubyリファレンスマニュアル
Enumerableモジュール
インスタンスメソッド each_with_index
https://docs.ruby-lang.org/ja/latest/class/Enumerable.html
これで案内表示をだすことができる。
今回の動作確認環境
Ruby 2.4.3p205
macOS 10.13.3
ターミナル
Windows10
Windows PowerShell