gets.chomp.to_iのchomp不要論
6ヶ月ぐらいまともにコード書いてないことに気づいてしまったので、AtCoderで練習しようと思った。 で、rubyで始めたんだけど気になることがあった。 提出された人のコード見てると
gets.to_i
してる人と
gets.chomp.to_i
してる人がいる。
まあ、どちらとも通ってるのでgets.to_i
が正しいんだろうなと思った。
パッと見でchomp使ってる人と使ってない人コード見比べてもね
ググる。
結論としてはto_i
に妥当ではない文字が入力された場合無視され、どんな数かわかんねーよ状態なら0が返る。
"100万回生きた猫".to_i #=> 100 "ハゲの髪の毛".to_i #=> 0
もちろん改行文字が入っていた場合も同じ。
"1\n".to_i #=> 1
でもchomp使って改行除いてからの方が速いんじゃね派がいるかもしれないから簡単にベンチマーク測った。
require 'benchmark' n = 10_000_000 Benchmark.bm(9) do |x| x.report(" chomp:") { n.times { "1\n".chomp.to_i }} x.report("no chomp:") { n.times { "1\n".to_i }} end
user system total real chomp: 3.650000 0.000000 3.650000 ( 3.655401) no chomp: 2.410000 0.000000 2.410000 ( 2.409925)
chomp使わない方が速い。 まあそうだろうな。
結論
gets.to_i
を使う。