2016-11-09 3 views
0

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

if (list.size() == 1 || list.size() <= 4) {...} 

Я заметил, что я не вижу, как это не отличается от только что делать

if (list.size() <= 4) {...} 

он сказал это важно и должно быть первым. Я не понимаю. Может быть, если бы это было что-то вроде

if (list.size() == 1 || list.size() <= someVeryCostlyFunction()) {...} 

и размер должен был быть 1 большую часть времени вы можете использовать оба, если someVeryCostlyFunction() всегда возвращает некоторое положительное число> = 1. В противном случае я не могу видеть разница. Мы должны проверить эффективность.

+3

«Это важно и должно быть первым». Это не похоже на убедительный ответ на вопрос. Я бы не стал уделять много внимания действиям людей, которые не могут объяснить, почему они совершили эти действия. – David

+0

, тогда вам нужно вычислить 'list.size()' один раз для стартеров ... –

+0

Под «должно быть первым» я имел в виду первый пример с двумя условиями, а не второй с одним условием – Tony

ответ

1

Код smells с этими двумя условиями:

if (list.size() == 1 || list.size() <= 4) 

Возможно, автор имеет в виду, что:

если есть некоторое количество элементов в списке, который 4 или меньше.

Больше, чем текущий код позволяет удовлетворять условию, даже если в списке есть нулевые элементы, что, скорее всего, неверно.

Другой проблемой при этом условии является использование magic number 4?
Что так важно и почему это не 5? Следует самостоятельно документировать и отличается от других 4-х, которые могут появиться в коде:

int MAX_HANDLED = 4; 
if (list.size() > 0 && list.size() <= MAX_HANDLED) 
: 
: 
int ALL_TIRES = 4; 
if (car.getTires() < ALL_TIRES) { 
    car.stop(); 
} 

Что касается производительности, я не вижу каких-либо значительных причин, почему существующие условия должны быть быстрее, то ваш предложил один (даже второй будет быстрее, если list.size > 1). См. Это question аналогичной озабоченности.

+0

Теперь я вижу, что он хотел быть предупрежденным, если размер был> 4, но вам все равно не нужно == 1. И вам нужно> 0, хотя, я думаю, вы получите ошибка утверждения - это размер == 0: WebElement ele = lists.get (0). Дает утверждение (или size = 0 ind = 0 или что-то еще) – Tony

+0

Если для пустого списка уже есть утверждение, вам не нужна первая проверка. Таким образом, проверка, которую вы предложили, должна быть достаточной. – MaxZoom

Смежные вопросы