«Если» против «переключателя» [дубликат]
Возможный дубликат:
«else if» быстрее, чем «switch () case»?
В последнее время я сталкивался со многими ситуациями, когда у меня были очень простые условные выражения и мне нужно было разветвлять поток приложения. «Самое простое» средство выполнения того, что я делаю, - просто стараяif
/elseif
заявление:
if($value == "foo") {
// ...
} elseif($value == "bar") {
// ...
} elseif($value == "asdf" || $value == "qwerty") {
// ...
}
... но я также рассматриваю что-то вроде:
switch($value) {
case "foo":
// ...
break;
case "bar":
// ...
break;
case "qwer":
case "asdf":
// ...
}
Это кажется немного менее читабельным, но, возможно, более производительным? Однако, когда в условных выражениях появляется все больше и больше выражений "или", кажется, что оператор switch гораздо более читабелен и полезен:
switch($value) {
case "foo":
// ...
break;
case "bar":
case "baz":
case "sup":
// ...
break;
case "abc":
case "def":
case "ghi":
// ...
break;
case "qwer":
case "asdf":
// ...
}
Я также видел варианты, где поток кода разветвляется с использованием массивов и функций:
function branch_xyz() {/* ... */}
function branch_abc() {/* ... */}
function branch_def() {/* ... */}
$branches = array(
"xyz"=>"branch_xyz",
"abc"=>"branch_abc",
"def"=>"branch_def"
);
if(isset($branches[$value])) {
$fname = $branches[$value];
$fname();
}
Этот последний вариант также, вероятно, имеет то преимущество, что его можно распределять между несколькими файлами, хотя он довольно уродлив.
Что, по вашему мнению, имеет больше преимуществ с наименьшим количеством компромиссов с точки зрения производительности, удобочитаемости и простоты использования?