Ruby Tips Part 1(globaldev.co.uk)
globaldev.co.uk
Ruby Tips Part 1
http://globaldev.co.uk/2013/09/ruby-tips-part-1/
3 comments
Maybe it's old age but I find that annoying too. Looks pretty but is unreadable.
Is this:
def fibonacci(max=Float::INFINITY)
# ...
while i < max
# ...
end
end
better than this: def fibonacci(max=nil)
# ...
while max && i < max
# ...
end
end
?
(genuine question)What you meant is `while !max || max < i`, but the answer is the same: the former will perform better because it only makes one comparison for each iteration of the loop. The latter needs to additionally check the existence of max.
yes. The first one does what it's intended to, the second plain fails :)
Voice-of-Evening:~ $ irb
irb(main):001:0> max=Float::INFINITY
=> Infinity
irb(main):002:0> i = 0
=> 0
irb(main):003:0> i < max
=> true
irb(main):004:0> max = nil
=> nil
irb(main):005:0> max && i < max
=> nil
The second version will only provide any result when a specific max value was given, while the first one will loop into infinity.Ruby is neat! Except for this part:
return nil unless other.is_a?(self.class)I'm a fan of:
while true do
puts 'lol'
end unless true
but seriously, I like postconditions. they're also handy for encoding intent, if you have a pattern of the left-hand-side being the primary logic flow.Is it a statement-modifier 'unless' that bothers you? `return ... unless ...` is kind of idiomatic way of returning early in the function. You get used to this shortcut ridiculously fast.
Wait, why? Try to read it aloud and it will make sense. I've seen lot's of hard and confusing syntax but this is not one of them. And I'm not a Ruby developer.
Post conditions are odd if you're not used to them, but once you start to mentally allow for them, they're really quite nice.
Ah, seems everybody misunderstood my comment (not hard to see why). It's not the post conditions that bother me, its the dynamic typing! In my opinion, ruby's duck typing really only works until you actually need it.
this can also be written as
other.is_a?(self.class) || return
if you prefer that.
What is with the trend of mid-range gray on white or light gray these days? Does anyone find that easy to read?