Rubyのstringからsymbolへの変換はコロンが早い

stringからsymbolへの変換は、to_symを使うものだと思っていたけど:"hoge"でもできる。

んでどっちが早いのか調べてみた。

require "benchmark"

n = 1_000_000
hash = { hoge: "" }

Benchmark.bm(8) do |x|
  3.times do
    x.report("to_sym :") { n.times{hash["hoge".to_sym]} }
    x.report("colon :")  { n.times{hash[:"hoge"]} }
  end
end

結果

               user     system      total        real
to_sym :   1.090000   0.000000   1.090000 (  1.100188)
colon :    0.340000   0.000000   0.340000 (  0.344089)
to_sym :   1.030000   0.000000   1.030000 (  1.036727)
colon :    0.350000   0.000000   0.350000 (  0.353148)
to_sym :   1.050000   0.000000   1.050000 (  1.057641)
colon :    0.320000   0.010000   0.330000 (  0.325692)

というわけでコロンで書いたほうが3倍くらい早いみたい。
ただ個人的にはto_symで書いたほうが読みやすいと思う。