Как упростить операторы IF со многими условиями - PullRequest
0 голосов
/ 02 апреля 2020

Я часто сталкивался с примерами кодов, как показано ниже.

if(X == x && A == a){
}
else if (X == y && A == b){
}
else if (X == z && A == c){
}
else if (X == zz && A == d){
}

ИЛИ иногда такие условия

if(X == x && A == a){
}
else if (X == x && A == b){
}
else if (X != x &&  A == a){
}
else if (X !=x  && A == b){
}

Существуют ли более эффективные и лучшие способы рефакторинга этого кода с точки зрения эффективность, четкость кода и понятность?

Ответы [ 3 ]

0 голосов
/ 02 апреля 2020

Возможным решением было бы использовать выражение switch-case следующим образом:

switch(X + "|" + A) {
    case x + "|" + a:
        ...
        break;
    case y + "|" + a:
        break;
    case z + "|" + c:
        break;
    case zz + "|" + d:
        break;
}

Я не знаю, считаете ли вы, что этот стиль написания выглядит лучше, но он менее эффективен, чем один, который вы предложили в своем вопросе, так как вы должны объединить строки перед их сравнением.

0 голосов
/ 02 апреля 2020

Вы можете заключить свой оператор в функцию, это будет немного чище:

if(X == x && A == a){
  do_A();
}
else if (X == x && A == b){
  do_B();
}
else if (X != x &&  A == a){
  do_C()
}
else if (X !=x  && A == b){
  do_D()
}

станет:

const doSomething = () => {
  if (X == x && A == a) return do_A();
  if (X == x && A == b) return do_B();
  if (X != x &&  A == a) return do_C();
  if (X !=x  && A == b) return do_D();
};

doSomething();
0 голосов
/ 02 апреля 2020

Вы можете использовать оператор switch следующим образом: switch (выражение) {case x: // code block break; case y: // кодовый блок break; default: // code block} однако у вас не будет намного более эффективного кода, как упомянуто @ jcubi c

...