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

Джон "Капитан" Воробей 06.08.2015 14:36

If или Switch?
 
Что красивее, это
var result = value.type+" 1 комн.";
      if(value.rooms>1&&value.rooms<5) result = value.type+" "+value.rooms+"-х комн.";
      if(value.rooms==5||value.rooms==6||value.rooms>8) result = value.type+" "+value.rooms+"-ти комн.";
      if(value.rooms==7||value.rooms==8) result = value.type+" "+value.rooms+"-ми комн.";
    return result;


или вот это

switch(parseFloat(value.type)){
  case 1: 
    return value.type+" 1 комн.";
  case 2:
  case 3:
  case 4:
    return value.type+" "+value.rooms+"-х комн.";
  case 5:
  case 6:  
    return value.type+" "+value.rooms+"-ти комн.";
  case 7:
  case 8: 
    return value.type+" "+value.rooms+"-ми комн.";
}


Или и то и то унылое г и надо по другому писать?

EmperioAf 06.08.2015 15:06

ну 2-ое в 14 строчек читается намного легче чем 1-ое в 5 строчек :)

demoniqus 06.08.2015 15:52

var wordEnding = {1: ' 1 ', 2: '-x ', 3: '-x ', 4: '-x ', 5: '-ти ', 6: '-ти ', 9: '-ти ', 7: '-ми ', 8: '-ми '};
result = value.type + ' ' +value.rooms + (wordEnding[value.rooms] || '') + 'комн.';

И еще такой момент - в твоем первом варианте скрыт дефект - лишняя проверка. Используй else, чтобы по возможности не выполнять лишних проверок, если какое-то условие подошло. Кроме того, если бы использовались какие-то пересекающиеся условия, то ты бы мог получить исполнение нескольких условных блоков, что является ошибкой.

javaQest 07.08.2015 18:42

Джон "Капитан" Воробей,
Независимо от "красоты" if универсальней и проще. Не стоит экономить на спичках, лучше вообще switch не использовать.

javaQest 07.08.2015 18:47

Джон "Капитан" Воробей,
Кстати, в Вашем первом куске не хватает ретурнов. Оберните все функциеей и используйте ретурн, а при таком подходе как у Вас, Вы должны учитывать, что может исполниться не одна ветка ветвления.

а в свитче используется break а не return.


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