Можно ли использовать троичный оператор в если еще лестница в Java? - PullRequest
0 голосов
/ 25 октября 2019

Я видел, что троичный оператор можно использовать в ситуациях if else, но ни один из них не включает в себя оператор else if (if-else). Итак, есть ли способ использовать троичный оператор в этой ситуации. Я новичок в Java. Так что не против, если это глупый вопрос.

Ответы [ 3 ]

3 голосов
/ 25 октября 2019

Да, но это кодовый запах согласно сонар

Хотя троичный оператор довольно компактен, его использование может усложнить чтение кода. Поэтому следует избегать в пользу более многословной структуры if / else

Например, продолжая проверку после после :

 a==b?b:a==c?c:d

Должно быть

if (a==b) {
else if (a==c) {
} else { 
}
0 голосов
/ 25 октября 2019

Могут рассматриваться каскадные операции if-else или вложенные троичные операции. Многие люди предпочитают каскадные операторы if-else. Я обнаружил, что вложенные троичные операции являются приемлемыми, если выражения просты и используется адекватное форматирование.

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

Вот два примера:

public int selectorI(boolean c1, int v1, boolean c2, int v2, boolean c3, int v3, int vDef) {
    if ( c1 ) {
        return v1;
    } else if ( c2 ) {
        return v2;
    } else if ( c3 ) {
        return v3;
    } else {
        return vDef;
    }
}

public int selectorT(boolean c1, int v1, boolean c2, int v2, boolean c3, int v3, int vDef) {
    return ( c1 ? v1 :
           ( c2 ? v2 :
           ( c3 ? v3 : vDef ) ) );
}
0 голосов
/ 25 октября 2019

Давайте рассмотрим пример того, что вы предлагаете:

Обычный код:

int greatestNumber(int a, int b, int c)
{
    if(a > b && a > c)
    {
     return a;
    }
    else if(b > a)
    {
     if(b > c)
     {
      return b;
     }
     else
     {
      return c;
     }
    }
 return 0;
}

Тот же код, но с троичным оператором:

int greatestNumber(int a, int b, int c)
{
    return (a > b && a > c)? a: (b > a? (b > c? b: c): 0);
}

Как вы можетеувидеть, что это возможно, но не рекомендуется, поскольку это создает код, который трудно читать

...