Является ли хорошей практикой использование оператора xor для логических проверок? - PullRequest
147 голосов
/ 02 октября 2008

Мне лично нравится оператор exclusive или , ^, когда он имеет смысл в контексте логических проверок из-за его краткости. Я предпочитаю писать

if (boolean1 ^ boolean2)
{
  //do it
}

чем

if((boolean1 && !boolean2) || (boolean2 && !boolean1))
{
  //do it
}

но меня часто смущают взгляды других опытных разработчиков Java (не только новичков), а иногда и комментарии о том, как его следует использовать только для побитовых операций.

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

Ответы [ 13 ]

0 голосов
/ 17 ноября 2010
str.contains("!=") ^ str.startsWith("not(")

выглядит лучше для меня, чем

str.contains("!=") != str.startsWith("not(")
0 голосов
/ 05 февраля 2009

! = ОК, чтобы сравнить две переменные. Это не работает, однако, с несколькими сравнениями.

0 голосов
/ 02 октября 2008

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

Единственное предостережение, которое я могу заявить, это то, что "^" не имеет семантики короткого замыкания вашей второй логической проверки. Если вам действительно нужна семантика короткого замыкания, тогда работает статический метод util.

public static boolean xor(boolean a, boolean b) {
    return (a && !b) || (b && !a);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...