Hacker News new | ask | show | jobs
by prophetjohn 4162 days ago
I haven't used Groovy much, so I may be completely missing something here, but how is the elvis operator different from a simple guard in Ruby?

Based on the docs for elvis, it looks like

    potentiallyFalsyValue ?: safeDefault
is exactly equivalent to

    potentially_falsy_value || safe_default
in Ruby

Further, the null-safe operator seems to be the same as #try in Rails and overuse of either is probably a bit of a smell that you might be violating Tell Don't Ask

2 comments

Yes, I see || as a wart or crufty. Think about the type signature of || in ruby:

  <Type 1 or Type2> ||(Type1 arg1, Type2 arg2)
but in how many other languages is this?

  boolean ||(arg1, arg2)
C, Java, Objective-C, C++, C#, PHP vs Ruby, Perl, Javascript

If || is used more frequently as a logical operator returning true(1) or false(0) to test logical or (not to be used for assignment), why overload this operator?

Having a separate operator like ?: better shows the intention of the usage. It also resembles the ternary function which has similar functionality.

It's subtle, but I think the difference is that in ruby when potentially_falsy_value is false you will get the safeDefault. But with ?: you would get the potentiallyFalsyValue as false. The only time you get safeDefault is when potentiallyFalsyValue is nil/null
The docs seem to state otherwise

   One instance of where this is handy is for 
   returning a 'sensible default' value if an 
   expression resolves to false or null
http://groovy.codehaus.org/Operators#Operators-ElvisOperator(?:)