Use hash or case-statement in Ruby?
Dmitry Voronov
Posted on July 3, 2019
Often, when we need to get a value based on the other one, we're using a case-statement. Like this
def realizing_trade_type(realizable_trade_type)
case realizable_trade_type
when 'buy'
'sell'
when 'short'
'cover'
when 'buy_contract'
'sell_contract'
when 'short_contract'
'cover_contract'
end
end
But, if the conditions and the results are simple values, why don't we use hash for this? We can :)
REALIZING_TRADE_TYPES = {
'buy' => 'sell',
'short' => 'cover',
'buy_contract' => 'sell_contract',
'short_contract' => 'cover_contract'
}.freeze
Here is the benchmark of both options, executed 10_000_000 times. It shows that a hash is faster in times for such the kind of usage.
>> require 'benchmark'
true
>> Benchmark.bm(15) do |x|
x.report('hash') { 10_000_000.times { REALIZING_TRADE_TYPES['buy'] } }
x.report('case-statement') { 10_000_000.times { realizing_trade_type 'buy' } }
x.report('empty') { 10_000_000.times {} }
end
user system total real
hash 0.990423 0.003412 0.993835 ( 1.057612)
case-statement 1.752263 0.004531 1.756794 ( 1.762030)
empty 0.380810 0.000728 0.381538 ( 0.382153)
So, it's better to use a hash when you are just retrieving some values (like in the example above). If there is additional logic to execute, a case-statement is still a way to go.
💖 💪 🙅 🚩
Dmitry Voronov
Posted on July 3, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
codenewbie My Journey Through Ruby Event Manager, Hangman, and Tackling Coolant Leaks
November 29, 2024