Nik So
Nik So

Reputation: 16821

coffeescript not implicitly returning "false"

I am trying to add a method to the String primitive type/class where I can extra params from a URL string

String::getUrlParams = ->                        # line 1 
    false unless ( params = @.split('?')[1] )    # line 2
    # ...

In Chrome console, when I deliberately call this method with a string of URL without params, I expect it to just return false.

"http://dns.com/".getUrlParams();

but it goes pass through line 2.

if I change line 2 to

   return false unless ( params = @.split('?')[1] ) # line 2`

then it does return false and stops the function at line 2

Any idea why coffeescript isn't returning false and halts the function in the first version?

Thank you

Upvotes: 3

Views: 1672

Answers (1)

nagisa
nagisa

Reputation: 720

Coffeescript returns only the last function statement. If something follows some statement, that you want to return in middle of function, then you should do that explicitly.

--Short thoughts-- In short - Coffeescript compiler is not that smart, to predict, where you may want or may not want to return something. And same applies to most compilers now days. Also it's non-smartiness avoids most of mistakes, which would be caused because of premature return.

Upvotes: 7

Related Questions