Was browsing the jQuery source code when I met this line:
jQuery(this)[ state ? "show" : "hide" ]();
Are there any advantages over
state ? jQuery(this).show() : jQuery(this).hide();
?
Standalone example:
var object = {
foo: function() {
alert('foo');
},
bar: function() {
alert('bar');
}
};
object[true ? 'foo' : 'bar']();
object[false ? 'foo' : 'bar']();
No, other than slightly shorter code, and not repeating
jQuery(this).
However the repetition could be mitigated by declaring e.g.
$this
first.I don't find this pattern particularly easy to read, so the only time I would use it myself is if the argument list is non-trivial, and not dependent on which method is being invoked.
There's no advantage in performance. But there's an advantage in length of code (if you see it as an advantage), and DRY principle (don't repeat code) specially if you have many parameters in your functions.
Consider the following:
Versus:
As you can see, you repeat 'a lot' of code in the second way
Hope this helps. Cheers
In your example, there is no difference between
and
However, squares can be used to call a function without it's name:
Why this is useful ? In the above example, its totally useless. But we can find some situations where it could be nice:
This snippet will choose one random method and call that method over the jQuery object. Isn't that nice ? :)
The jQuery way is more concise and adheres to the DRY principle. I think that's the main advantage over the second example.
In order, I'd rank:
My issue with
jQuery(this)[ state ? "show" : "hide" ]();
is that it's not a common design pattern that lots of people are used to seeing and used to reading. As such, it's not super readable and could easily confuse people trying to maintain this code in the future (leading to bugs). As my priorities above show, I'd favor readability over DRY if the two are at odds.In this case, I'd probably write:
Not as short, but more readable in my opinion.