Ответ 1
Помимо "удобочитаемости", нет. Они функционально эквивалентны.
( "Чтение" находится в кавычках, потому что я ненавижу == false
и нахожу !
гораздо более удобочитаемым, а другие нет.)
Возможный дубликат:
Неплохо ли явно сравнивать с булевыми константами, например. if (b == false) в Java?
В этот образец примера NotePadProvider, я заметил, что автор выбрал форму:
if (values.containsKey(NoteColumns.CREATED_DATE) == false) {
values.put(NoteColumns.CREATED_DATE, now);
}
Over:
if (!values.containsKey(NoteColumns.CREATED_DATE)) {
values.put(NoteColumns.CREATED_DATE, now);
}
Есть ли преимущество первой формы над более логичной?
Помимо "удобочитаемости", нет. Они функционально эквивалентны.
( "Чтение" находится в кавычках, потому что я ненавижу == false
и нахожу !
гораздо более удобочитаемым, а другие нет.)
В большинстве случаев READABILITY. При чтении другого кода гораздо более понятным считать НЕ СОДЕРЖАТЬ KEY !values.containsKey(NoteColumns.CREATED_DATE)
вместо чтения КОНТЕЙНЕРЫ KEY FALSE (values.containsKey(NoteColumns.CREATED_DATE) == false)
.
Это выбор стиля. Это не влияет на производительность кода в меньшей степени, это просто делает его более подробным для читателя.
Нет. Я не вижу никакого преимущества. Второй - более простой.
btw: Второй стиль найден в каждом углу источника JDK.
- Здесь больше о coding style
, чем о функциональности....
Примечание. С помощью ConcurrentMap вы можете использовать более эффективные
values.putIfAbsent(NoteColumns.CREATED_DATE, now);
Я предпочитаю менее подробное решение и избегаю таких методов, как IsTrue или IsFalse или их подобные.
Первая форма, когда используется с API, который возвращает Boolean
и сравнивается с Boolean.FALSE, никогда не будет бросать NullPointerException
.
Вторая форма, когда она используется с интерфейсом java.util.Map
, также никогда не будет бросать NullPointerException
, потому что возвращает Boolean
, а не Boolean
.
Если вас не интересуют последовательные идиомы кодирования, вы можете выбрать тот, который вам нравится, и в этом конкретном случае это действительно не имеет значения. Если вы заботитесь о последовательном кодировании, подумайте о том, что вы хотите сделать, когда вы проверите Boolean
, который может быть NULL
.