Условный оператор в операторе "if"?

Я записал следующее if- оператор в Java:

if(methodName.equals("set" + this.name) ||
    isBoolean() ? methodName.equals("is" + this.name) :
                  methodName.equals("get" + this.name)) {
    ...
}

Это хорошая практика для записи таких выражений в if, разделить состояние от условия? И это выражение может быть упрощено?

5
задан Pindatjuh 13 May 2010 в 01:06
поделиться

4 ответа

Я бы изменил его на

if (methodName.equals("set" + this.name)
 || methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
    ...
}
8
ответ дан 18 December 2019 в 13:11
поделиться

Не сработает ли что-то вроде следующего?

if (methodName.equals("set" + this.name)
    || methodName.equals("get" + this.name)
    || (isBoolean() && methodName.equals("is" + this.name))) {
    ...
}

Это более читабельно, чем то, как вы использовали тернарный оператор, и, конечно, легче для понимания. Он также имеет то преимущество, что позволяет избежать ненужного вызова метода isBoolean (он имеет 1, 2 или 4 вызова метода, тогда как ваш всегда имеет 1 или 3; прирост / потеря производительности, вероятно, слишком минут, чтобы заметить).

Здесь также есть аналогичный вопрос под названием «Разумно ли это использование тернарного оператора?» Один пользователь сказал следующее:

Тернарный оператор подразумевается чтобы вернуть значение.

IMO, он не должен изменять состояние, и следует использовать возвращаемое значение.

В другом случае используйте операторы if. Операторы If предназначены для выполнения блоков кода.

Обратите внимание, что я заключил в круглые скобки выражение, содержащее '&&', для удобства чтения. В них нет необходимости, потому что x && y оценивается до m || n .

Выбираете ли вы его использование, зависит от вас, но я стараюсь избегать этого в пользу удобочитаемости.

2
ответ дан 18 December 2019 в 13:11
поделиться

Хорошая ли это практика? Хорошая, если это облегчает чтение. Это облегчает чтение, если (1) это так, и (2) человек, которого это смутит, не будет это читать. Кто будет это читать?

2
ответ дан 18 December 2019 в 13:11
поделиться

Я был бы склонен изменить его на

if (methodName.equals(setterForThis())
   || methodName.equals(getterForThis())) {
    ...
}

с некоторыми извлеченными функциями:

private String setterForThis() {
   return "set" + this.name;
}

private String getterForThis() {
   return (isBoolean() ? "is" : "get") + this.name;
}

Конечно, он длиннее, но я все равно не очень люблю гольф.

2
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: