Можно получить действительно большой настольный фон здесь . Это имеет тонну действительно полезных сочетаний клавиш. Я использовал его в течение нескольких дней прежде, чем запомнить самые полезные.
Да, используйте else if, рассмотрите следующий код:
if(predicateA){
//do Stuff
}
if(predicateB){
// do more stuff
}
of
if(predicateA){
//
}
else if(predicateB){
//
}
во втором случае, если predicateA истинно, predicateB (и любые другие предикаты) не должны быть оценивается (и поэтому весь код будет выполняться быстрее), тогда как в первом примере, если predicateA истинно, predicateB всегда будет вычисляться, и вы также можете получить некоторые неожиданные сюрпризы, если predicateA и predicateB не являются взаимоисключающими.
You can have a look at phpbench
But to be honest if you want to optimize at this level, you might want to learn something else than php.
Если честно, я не думаю, что это будет иметь значение с точки зрения производительности, я сомневаюсь, что вы заметите какую-либо разницу. Я бы порекомендовал использовать оператор switch, который не улучшает производительность, а просто синтаксически лучше:
switch ($day)
{
case "Monday":
// do something with Monday
break;
case "Tuesday":
// do something with Tuesday
break;
case "Wednesday":
// do something with Wednesday
break;
}
else if
будет быстрее в том смысле, что вы сравниваете, пока не достигнете условия, которое разрешается в true, и вы пропустите остальные if
s.
Также рассмотрите возможность переупорядочения сравнений в порядке убывания частоты.
И использование оператора переключателя
в зависимости от типа данных объекта, который вы сравниваете.
Однако на этом этапе, как у duffymo, предложили, вы будете микро-оптимизацию. Прирост производительности никогда не будет таким значительным, если вы сначала не выбрали правильный алгоритм сортировки для задания.
Если значения являются целыми числами, вы можете добиться оптимизации, используя поиск в таблице. Например, у вас есть 256 значений, которые каким-то образом сопоставляются с 7 днями, вы можете создать массив из 256 ячеек, и каждая ячейка будет содержать нужный вам день недели. Тогда вместо:
if ( value == 0 ) {
dayofweek = 1;
} else if ( value == 1 ) {
dayofweek = 2;
} else if ( value == 2 ) {
dayofweek = 3;
} else if ...
.. вы могли бы иметь ..
dayofweek = lookuparray[value];
Конечно, если вы используете эту технику, тогда вы должны сначала проверить границы значения.
In general, "else if" style can be faster because in the series of ifs, every condition is checked one after the other; in an "else if" chain, once one condition is matched, the rest are bypassed.
The fastest would be a table dispatch, which is what a switch statement gets optimized into when there are enough cases in it (if there are few cases in a switch, it gets translated into a series of if-else checks in the resulting machine code).
The decision to use many if-statements or one if-elseif-elseif... should not rely on performance, since this decision involves the program flow massively.
I doubt that you can switch from many if-statements to a big if-elseif without loosing functionality.
Its a design question, not a perfomance one.
Я сомневаюсь, что такая микрооптимизация внесет ощутимые изменения в ваш код.
Ваш алгоритм сортировки, скорее всего, станет источником проблемы с производительностью. Какой алгоритм сортировки вы выберете, будет иметь решающее значение, не так много «если» по сравнению с «else if».
ОБНОВЛЕНИЕ:
Замечания, высказанные другими о том, что «else if» является лучшим выбором из-за его раннего выхода и исключительного логические характеристики, предполагают, что в этом случае его следует предпочесть «если».
Но точка зрения о выборе алгоритма все еще остается в силе - если только ваш набор данных не очень мал.
Очевидно, что O (log n) будет лучше, чем O (n ^ 2), но размер набора данных тоже имеет значение. Если у вас всего несколько элементов, вы можете не заметить разницы. В этом случае кодирование неэффективного метода самым чистым,
Я бы еще раз проголосовал за использование оператора switch ().