Условный оператор в операторе if? - PullRequest
5 голосов
/ 13 мая 2010

Я написал следующее if заявление на Java:

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

Полезно ли писать такие выражения в if, чтобы отделить состояние от условия? И можно ли это выражение упростить?

Ответы [ 4 ]

8 голосов
/ 13 мая 2010

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

if (methodName.equals("set" + this.name)
 || methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
    ...
}
2 голосов
/ 13 мая 2010

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

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

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

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

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

Конечно, это дольше, но я все равно не увлекаюсь гольфом.

2 голосов
/ 13 мая 2010

Не хотелось бы что-то вроде следующей работы?

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

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

Также здесь есть похожий вопрос под названием «Является ли это разумным использованием троичного оператора?» У одного пользователя было следующее, чтобы сказать :

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

ИМО, оно не должно изменять состояние, и возвращаемое значение должно быть использовано.

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

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

Если вы решите использовать его, решать только вам, но я стараюсь избегать его в пользу читабельности.

2 голосов
/ 13 мая 2010

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

...