2
1

Rubyでgets.chompについて

Last updated at Posted at 2023-11-24

入力されたコメントを出力し、「終了」が入力されたら「終了します」と出力して終わるプログラムを作成します。

「終了」入力されるまで繰り返すので

while true
end

を使って繰り返して

break

で抜ければいいので

while true
  comment = gets
  if comment != "終了"
    puts "あなたのコメント: #{comment}"
  else
    puts "終了します"
    break
  end
end

と記述しました。

しかし

「終了」を入力したのに止まりません💦

そこで、getsの後ろに.chompを追記して

while true
  comment = gets.chomp
  if comment != "終了"
    puts "あなたのコメント: #{comment}"
  else
    puts "終了します"
    break
  end
end

と変更すると

無事「終了」で終わることができました☺️

なぜ.chompの記述が必要なのでしょうか?

chompは、文字列の末尾の改行コードを取り除いた値を返したり、文字列の終端が \r\n であればその2文字を取り除くメソッドです。

しかし、今回のコードには\r\nは記述していません。

実はgetsにはある特性があります。

irb(main):001:0> comment = "終了"
=> "終了"
irb(main):002:0> gets
終了
=> "終了\n"
irb(main):003:0> gets.chomp
終了
=> "終了"

このようにgetsの後にはキーボードのEnterを押したので「改行した」という意味で\nが自動で入ってしまいます。

なので.chompを入力して改行を取り除かないと「終了」を入力しても終わることが出来ていませんでした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1