ハッシュを使用している場合は、一度定義してください (定数として)。
いくつかのベンチマーク (実行時):
#!/usr/local/bin/ruby -w
require 'benchmark'
def by_hash1(i)
{ "option1" => [1,2,3], "option2" => [3,2,1] }[i]
end
TheHash = {
"option1" => [1,2,3],
"option2" => [3,2,1],
}
def by_hash2(i)
TheHash[i]
end
def by_case(i)
case i
when 'option1'
[1, 2, 3]
when 'option2'
[3, 2, 1]
end
end
def by_if(i)
if i.equal?('option1')
[1, 2, 3]
else
[3, 2, 1]
end
end
class Foo
def self.option1
[1, 2, 3]
end
def self.option2
[3, 4, 5]
end
end
N = 10_000_000
Inps = %w{ option1 option2 }
Benchmark.bm(10) do | x |
x.report('by hash1') { N.times { by_hash1(Inps.sample) } }
x.report('by hash2') { N.times { by_hash2(Inps.sample) } }
x.report('by case') { N.times { by_case(Inps.sample) } }
x.report('by if') { N.times { by_if(Inps.sample) } }
x.report('meta') { N.times { Foo.send(Inps.sample) } }
end
与える
user system total real
by hash1 11.529000 0.000000 11.529000 ( 11.597000)
by hash2 2.387000 0.000000 2.387000 ( 2.401000)
by case 3.151000 0.000000 3.151000 ( 3.155000)
by if 3.198000 0.000000 3.198000 ( 3.236000)
meta 3.541000 0.000000 3.541000 ( 3.554000)
私のルビー2.0.0p195(2013-05-14)[x64-mingw32]。
通常、パフォーマンスはあまり重要ではないと思います。パフォーマンスの問題が発生した場合にのみ、調査を開始する必要があります。それ以外の場合は、読みやすさなどの方が重要です。