user1431627
user1431627

Reputation: 815

Shorthand for if sentence

Why I am asking

I have been having a lot of trouble understanding the shorthand for the if sentence in JavaScript, and I haven't found an article or tutorial that described it well. And that's why I am stuck opitimizing my little code. And I am new to JavaScript, so if someone could give me a basic understanding of the shortning of this code, I would very much appreciate you telling me the magic behind the code.

What I need help with

I am going to use the exact same code in a lot of functions. Therefore, I want to optimize it and make it shorter version of the code.

function welcomemessage() {
if (br == 1) {
hello();
}
else {
hey();
}
}

Upvotes: 1

Views: 157

Answers (4)

Ayush
Ayush

Reputation: 42450

Use the ternary operator.

function welcomemessage() {  
  (br == 1) ? hello() : hey();
}

The ternary operator is useful, and not difficult to understand. here's how it works.

(condition) ? (true) : (false)

Edit:

Since JS treats functions as first class objects, it is possible to create a wrapper. Something like below (not tested though)

function ternaryWrapper(br, functionTrue, functionFalse){
   return (br == 1) ? functionTrue : functionFalse;
}

//call it
ternaryWrapper(2,hello, hey);

Upvotes: 6

Derek 朕會功夫
Derek 朕會功夫

Reputation: 94369

Even shorter:

function welcomemessage(br){
    [hello,hey][br-1]();    //This will work.
}
welcomemessage(1);  //hello();
welcomemessage(2);  //hey();

Fun Fact:1

To make your script hard to read for someone else, do it like this:

function welcomemessage(){
    return br==1 && (hello(),1) || (hey(),1);    //This will work too.
}

1 Totally not related to the answer.


Update

var something = ( (br == 1) ? hello() : hey() );

something will be the value hello() or hey() returned.

Upvotes: 2

ajax333221
ajax333221

Reputation: 11774

In case br is always be numeric, the xbonez answer can be optimized a little bit by using strict comparison === (because it is a little bit faster):

function welcomemessage() {
    (br === 1) ? hello() : hey();
}

And another interesting option is:

function welcomemessage() {
    (br - 1) ? hey() : hello();
}

This last function works because when br is 1, it will turn to 0 (which is a falsish value) and evaluate to false, triggering hello(), and for the rest it will trigger hey()

Upvotes: 0

Pointy
Pointy

Reputation: 413976

Or:

var msgfuncs = [ hey, hello ];
function welcommessage() { msgfuncs[br](); }

(assumes that when "br" isn't 1 it's 0, which of course may be an invalid assumption.)

If the choice is made with different functions, just put the array directly in the surrounding function:

function welcomemessage() {
  [ hey, hello ][br]();
}

If you want to make the decision and save the function to call later, you can do this:

var messageFunction = [ hey, hello ][ br ];

then any time later:

messageFunction();

Upvotes: 0

Related Questions