What does !! mean in ruby?
Not not.
It's used to convert a value to a boolean:
!!nil #=> false!!"abc" #=> true!!false #=> false
It's usually not necessary to use though since the only false values to Ruby are nil
and false
, so it's usually best to let that convention stand.
Think of it as
!(!some_val)
One thing that is it used for legitimately is preventing a huge chunk of data from being returned. For example you probably don't want to return 3MB of image data in your has_image?
method, or you may not want to return your entire user object in the logged_in?
method. Using !!
converts these objects to a simple true
/false
.
It returns true
if the object on the right is not nil
and not false
, false
if it is nil
or false
def logged_in? !!@current_userend
!
means negate boolean state, two !
s is nothing special, other than a double negation.
!true == false# => true
It is commonly used to force a method to return a boolean. It will detect any kind of truthiness, such as string, integers and what not, and turn it into a boolean.
!"wtf"# => false!!"wtf"# => true
A more real use case:
def title "I return a string."enddef title_exists? !!titleend
This is useful when you want to make sure that a boolean is returned. IMHO it's kind of pointless, though, seeing that both if 'some string'
and if true
is the exact same flow, but some people find it useful to explicitly return a boolean.