LoginSignup
1
0

More than 3 years have passed since last update.

【Ruby】getsメソッドの注意点

Posted at

標準入力からの文字列との比較処理を行ったところ、なぜかうまく行かなかったので
その原因と解決策を備忘録として記載します。

問題点

getsメソッドは標準入力からの文字列を受け取るためのメソッドです。
このメソッドを利用して取得した入力文字列と別の文字列を比較しようとすると
思い通りの結果が得られませんでした。

input = gets # hogeを入力
bool = (input == 'hoge')
print bool 
false

同じ値の文字列同士を比較してるはずなのになぜかfalseが返ってきました。

原因

調べたところ、どうやらgetsメソッドは標準で末尾に改行コード(\n)を追加するみたいです。

input = puts # hogeを入力
p input
"hoge\n"

改行コードが含まれている状態で比較しようとしていたので、比較しても弾かれてたみたいです。

解決策

末尾の改行コードを削除すればよさそうなので調べてみたところ、
そのためのメソッドとしてchompメソッドというのがあり、
こちらを利用したら、期待した結果が得られました!

input = gets.chomp # hogeを入力
bool = (input == 'hoge')
print bool 
true

補足

chompは何かの略称かなと思って調べてみたところ、teratailでの回答が参考になりました。
chompってなんの略?

推測をかなり含んでいますが
もともと、chopというのがあり末尾1文字を消す事ができました。
テキストファイルの末尾は改行で終わるのが(Unixの)マナーだったのでこれで問題なかったのですが
末尾に改行がついてないことや1文字でない環境もあったりと問題になり
「末尾の改行を削除する」関数が追加されchopのmultiline用だからchompになりました。

chopを末尾1文字から改行コード削除用にしたのが、chompメソッドみたいです。

参考

1
0
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
1
0