Tuesday, July 30, 2019

operators - What does ||= (or-equals) mean in Ruby?

a ||= b is the same as saying a = b if a.nil? or a = b unless a


But do all 3 options show the same performance? With Ruby 2.5.1 this


1000000.times do
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
a ||= 1
end

takes 0.099 Seconds on my PC, while


1000000.times do
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
a = 1 unless a
end

takes 0.062 Seconds. That's almost 40% faster.


and then we also have:


1000000.times do
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
a = 1 if a.nil?
end

which takes 0.166 Seconds.


Not that this will make a significant performance impact in general, but if you do need that last bit of optimization, then consider this result.
By the way: a = 1 unless a is easier to read for the novice, it is self-explanatory.


Note 1: reason for repeating the assignment line multiple times is to reduce the overhead of the loop on the time measured.


Note 2: The results are similar if I do a=nil nil before each assignment.

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...