|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:21)
| | Не надо мешать кислое с пресным.
Чрезмерно перегрузить функцию кодом можно и при линейной, и при циклической структуре алгоритма. switch здесь никак исключением не является. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 12:04)
| | Опасно то, что потом там начинают появляться ещё различные методы в этом свиче. В итоге ф-ии которые выполняют разную роль оказываются в одной длиннющей функции, в которой чтобы разобраться надо пол дня потратить. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:01)
| | Switch принципиально отличается от if/else тем, что позволяет срабатывать нескольким условиям сразу. И вот в этих случаях код получается очень понятным и читаемым. Правда, случаи эти не слишком часты. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:01)
| | >На самом деле я не хочу утверждать что его вообще не надо использовать. )
>Но пример с add, preview и form ярко показывает почему его стоит опасаться.
Почему?
В том коде я ничего опасного не обнаружил. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 11:48)
| | На самом деле я не хочу утверждать что его вообще не надо использовать. ) Но пример с add, preview и form ярко показывает почему его стоит опасаться. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 11:45)
| | вход/выход в каждую функцию это изрядный overhead, вызванный необходимостью смены контекста даже в языках компилируемых. А здесь и подавно. Не говоря о том, что есть полно ситуаций, когда контекст как раз таки хочется оставить исходный, не перетягивая его из функции в функцию.
Без лишних функций, пожалуйста.
Я, кстати, не утверждаю, что без switch нельзя обойтись.
Просто без него логику с ветвлением по значению из множества неудобно делать. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 02:03)
| | Можно по аналогии с предыдущим примером. Где каждой константе (%d, %M, %Y, ...) соответствует одна либо несколько ф-й. Соответствия можно хранить в массиве. | |
|
|
|
|
|
|
|
для: neadekvat
(06.08.2009 в 01:47)
| | а зачем вы склеиваете 3 абсолютно разные функции (доавление, предпросмотр и форма ввода) в одну функцию. Разбейте на 3. Код станет намного читабельнее благодаря тому что каждая ф-я делает то что должна.
<?php
function add() {
...
}
function preview() {
...
}
function form() {
...
}
$methods = array('add', 'preview', 'form');
if (in_array($_GET['act'], $methods)) {
$methods[$_GET['act']]();
}
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 00:47)
| | >Я не могу даже быстро придумать ситуацию
Попробуйте написать реализацию функции date() | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 00:47)
| | У меня есть файл, который совмещает в себе три разные функции: форма ввода, предварительный просмотр введенного, занесение значений в бд. А тут, думаете, тоже лучше что-нибудь с массивами намутить или через elseif мучать? И в этом файле, кстати, default у меня сверху, т.к. по умолчанию на экран выводится форма.
Вот открываю я этот файл спустя месяц, а даже не задумываюсь, где и что искать. Четко и ясно разделено на три части. Верхний блок - форма, средний блок - превью, нижний блок - занесение в бд.
<?php
switch ($_GET['act']) {
default: {forma}; break;
case 'preview': {preview}; break;
case 'add': {add}; break;
}
?>
|
| |
|
|
|
|