2016-09-19 4 views
0

У меня есть некоторые функции, зависящие от многих условий. Все переменные в условных операторах являются логическими переменными и код заключается в следующем, и я не люблю:simplify if else statement

if (userHasMoreThanOneMarket && isOnlyMarketSelected || !userHasMoreThanOneMarket && userHasMoreThanOneAgency) { 
     if (isOnlyAgencySelected) { 
      //do case 1 

     } else if (noAgencySelected && isOnlyMarketSelected) { 
      //do case 2 
     } 
    } 

Есть ли способ, чтобы сделать его более понятным и приятным?

+0

... если бы вы могли добавить полный код. – Tushar

+2

Выглядит неплохо для меня, нет очевидных увольнений. – Blazemonger

+0

Я не уверен, что здесь выглядит более чистый код, не зная, как эти переменные определены –

ответ

1

Ваш код кажется нормально, но если вам не нравится это, Вы могли бы сделать что-то вроде этого (заметим, что единственное улучшение здесь стиль, если вам нравится это лучше):

function check(){ 
    return { 
     valid: userHasMoreThanOneMarket && isOnlyMarketSelected || !userHasMoreThanOneMarket && userHasMoreThanOneAgency, 
     case: [ 
      isOnlyAgencySelected, 
      noAgencySelected && isOnlyMarketSelected 
     ] 
    }; 
} 

var conditions = check(); 
if (conditions.valid) { 
    if (conditions.case[0]) { 
     //do case 1 
    } else if (conditions.case[1]) { 
     //do case 2 
    } 
} 
2

Это примерно как кратким, поскольку вы собираетесь получить с помощью JavaScript. Я полагаю, что если вы действительно хотите, вы можете создать переменные для хранения бинарных опционов:

var multiMarketOneSelected = userHasMoreThanOneMarket && isOnlyMarketSelected; 
var singleMarketMultiAgency = !userHasMoreThanOneMarket && userHasMoreThanOneAgency; 

if (multiMarketOneSelected || singleMarketMultiAgency) { 
    if (isOnlyAgencySelected) { 
     //do case 1 

    } else if (noAgencySelected && isOnlyMarketSelected) { 
     //do case 2 
    } 
} 

Хотя я не знаю, если вы получаете много читаемости от этого.

1

Некоторые вещи, которые я хотел бы попробовать, чтобы сделать код более читаемым:

  1. инициализацию переменных таким образом, что вы не должны отрицать их снова. Таким образом, !userHasMoreThanOneMarket становится userHasOneMarket
  2. isOnlyMarketSelected звучит излишне для меня. И вы проверяете его во внешнем if-clause и внутреннем снова.
  3. У вас, вероятно, есть много кода над этим фрагментом кода для инициализации и установки всех этих булевых значений. Попробуйте return; инструкции после каждой переменной, чтобы избавиться от if-условий.

Надеюсь, это поможет.