Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   else if или switch (https://javascript.ru/forum/misc/7191-else-if-ili-switch.html)

mycoding 20.01.2010 11:59

else if или switch
 
Что быстрее else if или switch конструкция, прочитал в книге , что switch быстрее, есть сомнения...

Nekromancer 20.01.2010 13:18

ну когда у тебя 2 или 3 варианта, сатвь иф-эльс.. а если их больше 5, 10.. или может стать больше, то лучше использоваться свич..

B@rmaley.e><e 20.01.2010 15:27

Конструкции вида
var vr = getVr(); // some variable
if(vr == 1) {/*blah-blah-blah*/}
else if(vr == 2) {/*blah-blah-blah*/}
else if(vr == 3) {/*blah-blah-blah*/}
else {/*blah-blah-blah*/}
Лучше делать switch'ем. То, что не получается сделать switch'ем — через else if.

Dmitry A. Soshnikov 20.01.2010 15:33

Также, иногда удобно заменить switch объектом.

B~Vladi 20.01.2010 18:01

Цитата:

Сообщение от Dmitry A. Soshnikov
Также, иногда удобно заменить switch объектом.

Можно пример?

Dmitry A. Soshnikov 20.01.2010 18:16

Цитата:

Сообщение от B~Vladi
Можно пример?

Ну, иногда можно видеть код:

function doThis() {
  ...
}

function doThat() {
  ...
}

function foo(bar) {
  switch (bar) {
    case 'this':
      doThis();
      break;
    case 'that':
      doThat();
      break;
    ...
    default:
      ...
  }
}

foo('this');
foo('that');
...


который можно преобразовать в

var commands = {
  doThis: function () {...},
  doThat: function () {...}
};

function foo(bar) {
  return commands['do' + bar.capitalize()]();
}


Однако, это не всегда возможно. Но, в тех случаях, когда возможно - может быть достаточно эффективно в плане кода (в некоторых случаях - менее эффективно в плане памяти).

Riim 21.01.2010 03:32

Цитата:

Сообщение от Dmitry A. Soshnikov
Также, иногда удобно заменить switch объектом.

у меня несколько примеров, где это оказалось эффективно в плане производительности (ну и код конечно покрасивше стал).

Один из них (кусок метода вызываемого так: new Date().add({y: 1, m: 5, d: 10, s: 500}) ):
this.setTime(this.getTime() + count * ({w: 6048e5, d: 864e5, h: 36e5, n: 6e4, s: 1e3}[interval] || 1));

zm8 21.01.2010 08:55

http://webo.in/articles/habrahabr/78...s-performance/,
раздел "Ветви".

x-yuri 24.01.2010 06:25

Цитата:

Сообщение от B@rmaley.e><e
То, что не получается сделать switch'ем — через else if

+1


Часовой пояс GMT +3, время: 01:58.