ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

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