Каков предпочтительный способ написания логических выражений в Java? - PullRequest
7 голосов
/ 09 марта 2010

Я всегда писал свои логические выражения так:

if (!isValid) {
  // code
}

Но мой новый работодатель настаивает на следующем стиле:

if (false == isValid) {
  // code
}

Один стиль предпочтителен или стандартный?

Ответы [ 9 ]

10 голосов
/ 09 марта 2010

Я предпочитаю первый стиль, потому что для меня более естественно читать. Очень необычно видеть второй стиль.

Одна причина, по которой некоторые люди предпочитают вторую, а не другую альтернативу:

if (isValid == false) { ... }

в том, что с последним вы случайно пишете один = вместо ==, тогда вы присваиваете isValid вместо его тестирования, но с константой сначала вы получите ошибку компиляции.

Но с вашим первым предложением эта проблема даже не проблема, так что это еще одна причина, чтобы предпочесть первое.

8 голосов
/ 09 марта 2010

Все признают этот фрагмент:

if (isValid.toString().lenght() > 4) {
   //code
}

Я думаю, ваш второй пример смотрит в том же направлении.

8 голосов
/ 09 марта 2010

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

4 голосов
/ 09 марта 2010

Это было обсуждено для C # несколько часов назад.

Конструкция false == isValid является пережитком C-мира, где компилятор позволит вам выполнять назначения в операторе if. Я верю, что компиляторы Java предупредят вас в таком случае.

В целом, второй вариант слишком многословен.

2 голосов
/ 09 марта 2010

Здесь я попытаюсь дать исчерпывающий ответ, включающий в себя все приведенные выше ответы.

Первый стиль определенно предпочтителен по следующим причинам:

  • короче
  • это более читабельно и, следовательно, легче понять
  • это более широко используется, что означает, что читатели распознают шаблон быстрее
  • «ложь == ...», а не «... == ложь» - это еще одно нарушение естественного порядка, которое заставляет читателя подумать «происходит ли что-то странное, на что я должен обратить внимание», когда нет.

Единственным исключением является случай, когда переменная является логическим значением, а не логическим значением. В этом случае второе является выражением, отличным от первого, и имеет значение false, когда isValid равно нулю, а также когда это Boolean.FALSE. Если это так, есть веские аргументы в пользу использования второго.

2 голосов
/ 09 марта 2010

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

2 голосов
/ 09 марта 2010

IMO, первый гораздо более читабельный, а второй более многословный.

Я бы наверняка пошел на 1-й

1 голос
/ 09 марта 2010

Второй стиль не требует, чтобы вы отрицали выражение самостоятельно (что может быть намного сложнее, чем просто isValid). Но написание «isValid == false» может привести к непреднамеренному назначению, если вы забудете ввести два =, следовательно, идиома состоит в том, чтобы поставить с правой стороны то, что не может быть значением.

Первый стиль кажется предпочтительным среди людей, которые знают, что они делают.

0 голосов
/ 10 октября 2011

Я просто хочу сказать, что я изучил C двадцать лет назад в школе и перешел на Perl и Java, а теперь и на C #, которые имеют одинаковый синтаксис и ...

Я думаю (! Myvar) самый популярный

Я думаю (myvar == false) тоже хорошо

за 20 лет я НИКОГДА НЕ ВИДЕЛ

(false==myvar) 

Я думаю, что твой босс что-то курит ... Извини, но я бы воспринял это как знак, что твой босс - какой-то уродец контроля или тупица.

...