На основе версии ilius, но с текущей ветвью, отмеченной звездочкой и цветом, и показывающей только то, что не описано как «месяцы» или «годы» назад:
current_branch="$(git symbolic-ref --short -q HEAD)"
git for-each-ref --sort=committerdate refs/heads \
--format='%(refname:short)|%(committerdate:relative)' \
| grep -v '\(year\|month\)s\? ago' \
| while IFS='|' read branch date
do
start=' '
end=''
if [[ $branch = $current_branch ]]; then
start='* \e[32m'
end='\e[0m'
fi
printf "$start%-30s %s$end\\n" "$branch" "$date"
done
Это, вероятно, будет называться микрооптимизацией. Я не верю, что будет большая разница.
Однако порядок имеет большое значение для логики корпуса переключателя, если вы позволяете корпусам проваливаться, например
switch ($var) {
case 0:
case 1:
do_it();
break;
case 2:
do_it_else();
break;
}
Порядок важен, корпус будет провалиться и выполнить любой код до тех пор, пока он не перестанет работать.
Я бы не стал беспокоиться о скорости переключателя, если вы не сказали 100 возможных случаев. Но если тогда, скорее всего, вам следует провести рефакторинг своего кода.
Не беспокойтесь о скорости корпуса переключателя, если только вы не сказали 100 возможных случаев. Но если тогда, скорее всего, вам следует провести рефакторинг своего кода. Не беспокойтесь о скорости корпуса переключателя, если только вы не сказали 100 возможных случаев. Но если тогда, скорее всего, вам следует провести рефакторинг своего кода.Чтобы заметить разницу, вам понадобится намного больше 1000 случаев, но да, разница есть. Я написал тест:
function test_switch($value) {
$startTime = time() + microtime();
for ($i = 0; $i < 10000000; $i++) {
switch($value) {
case "abcdefg":
$j = $j + 1;
break;
case "hijklmno":
$j = $j + 1;
break;
}
}
$endTime = time() + microtime();
echo "Total time for argument $value: " . ($endTime - $startTime) . "<br>\n";
}
test_switch("abcdefg");
test_switch("hijklmno");
Это 10 миллионов запусков оператора switch. Результат:
Total time for argument abcdefg: 3.99799704552
Total time for argument hijklmno: 5.38317489624
Значит, разница есть, но она не будет заметна, пока вы не достигнете порядка 10 миллионов выполнений, конечно, в зависимости от вашего процессора.
Если вы не используете break;
для закрытия каждого оператора, PHP продолжит оценивать случаи до конца блока switch
, что может повлиять на производительность в достаточно большом блоке. Тогда порядок становится важным для получения желаемого поведения.
Из PHP.Net :
Оператор switch выполняется строка за строкой (фактически, оператор за оператором). Вначале код не выполняется. Только когда оператор case найден со значением, которое соответствует значению выражения switch, PHP начинает выполнять операторы. PHP продолжает выполнять операторы до конца блока switch или до первого появления оператора break. Если вы не пишете оператор break в конце списка операторов case, PHP продолжит выполнение операторов следующего случая. Например:
<?php
switch ($i) {
case 0:
echo "i equals 0";
case 1:
echo "i equals 1";
case 2:
echo "i equals 2";
}
?>
Я бы предостерегал от такого поведения и использовал break;
для каждого case
, поскольку это устранит некоторую двусмысленность, когда вы вернетесь к коду позже.
Обычно рекомендуется записывать сначала наиболее вероятный случай , затем второй ...
но, как писал Алекс,
называться микрооптимизация. Я не верю будет большая разница.