Hacker News new | past | comments | ask | show | jobs | submit login

Haven't yet seen anyone point out what unpleasantly quirky code this was in the first place:

    !isActive && $parent.toggleClass('open')
It should have been written like this:

    if (!isActive) {
         $parent.toggleClass('open');
    }
What if somebody needs to add a second bit of code to be executed if isActive is false? In the first case, they'd have to refactor the code into an if statement before adding it. It should have been an if statement in the first place.

If you want something to happen if something is true, then you should use an if statement. This is not controversial stuff. Don't look for "clever" ways to misappropriate other parts of the syntax in order to appeal to your own personal minimalist aesthetic taste. Be cooperative.

Edit: On re-reading this it comes off as preachy. In fact I've very recently taken a closer look at some of my own "little quirks" and realised how unhelpful they were for other developers. I guess I'm embarrassed about that and want to spread the embarrassment around.




You can always continue with

  !isActive && ($parent.toggleClass('open') || do_something_else())
but this is write-only code.

This actually reminds me of some cool hacks with structure pointers and functions in the Linux kernel.


Unless I'm mistaken 'do_something_else()' won't get executed if toggleClass() returns a value that evaluates to true. Because of short-circuit boolean evaluation.


That's correct. You could use:

  !isActive && ($parent.toggleClass('open'), do_something_else())
but I don't think anyone would advise it.


Actually, you are all missing Crockford's real point, which is that they are considering making ! a binding deference of function objects. If they do, then this:

  clearMenus()
  !isActive && $parent.toggleClass('open')
Becomes this:

  clearMenus()!isActive && $parent.toggleClass('open');
And not this:

  clearMenus();
  !isActive && $parent.toggleClass('open');
The no semi-colon crowd is ridiculous. There are no good arguments for omitting semicolons!


Why has this been downvoted? If you don't agree, try commenting - don't downvote! Sheesh?


there are even fewer good arguments for changing the semantics of the fucking logical negation operator 17 years down the line in a dynamic language with billions of end users and no discrete versioning


About as logical as using the logical negation operator for a purpose other than logical negation. :-)

So, how would you implement this dereferencing feature? given that this wouldn't be an issue if you added a semicolon, not sure why you are so hetup there...


there's also the case of being able to set a breakpoint for the code that executes only when !isActive == true




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: