Определение спагетти php? - PullRequest
5 голосов
/ 03 июня 2009

Я часто видел "спагетти", и мне просто нужно четкое объяснение того, что является кодом спагетти, а что не Просто потому, что я бы предпочел этого не делать.

Ссылки на PHP помогут, так как это мой язык по выбору.

Ответы [ 5 ]

11 голосов
/ 03 июня 2009

Разница в том, что код спагетти написан другими разработчиками. Ваш код никогда не является кодом спагетти.

9 голосов
/ 03 июня 2009

Термин «код спагетти» совсем не специфичен для PHP - он применяется ко всем языкам программирования и должен выглядеть очень похоже на большинстве языков (по крайней мере, с той же самой парадигмой). Возможно, вы понимаете это, однако, и просто хотите пример на PHP.

Статья Википедии на эту тему кажется довольно ясной:

Спагетти-код - уничижительный термин для исходного кода, который имеет комплекс и запутанная структура управления, особенно тот, который использует много GOTO, исключения, темы или другое "неструктурированные" ветвящиеся конструкции. Он назван таким, потому что поток программы имеет тенденцию выглядеть как миска спагетти, то есть скрученные и запутанные. Код спагетти может быть вызван несколько факторов, в том числе неопытные программисты и сложная программа, которая была постоянно изменяется в течение долгой жизни цикл. Структурированное программирование в значительной степени снизилась заболеваемость спагетти Код.

Эта ветка форума, Топ-100 признаков того, что я пишу спагетти-код в PHP , может быть вам полезна, так как она относится конкретно к PHP.

4 голосов
/ 03 июня 2009

Вот довольно приличное определение кода спагетти .

Это субъективный термин, который используется для описания кода, который является чрезмерно извилистым, плохо структурированным, трудным для понимания, непоследовательным, зависит от побочных эффектов (особенно глобальных побочных эффектов) или некоторой их комбинации.

PHP, как и большинство языков сценариев, свободно набран. Вам не нужно объявлять переменные перед их использованием. Многие переменные используются в «глобальной» области, и существуют условия для неявного включения файлов (автозагрузка), и это лишь некоторые из них. Ни одна из этих функций не является плохой, но при неправильном использовании они очень легко могут привести к коду спагетти.

0 голосов
/ 03 июня 2009

В хорошо написанном коде вы должны быть в состоянии четко следить за потоком не только от начала до конца, но и от конца к началу (если не существует фатальной ошибки, в этом случае ваш обработчик должен иметь вывод обратной трассировки). Следуйте правилу одного входа и одного выхода для каждой функции .

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

Если функция возвращает неожиданное значение, чистый код позволит вам начать с оператора return и работать в обратном направлении, чтобы увидеть, где он получил свое значение. Однако, если код спагетти, то примерно половину времени вы будете тратить часы, ломая голову над тем, как функция может возвращать это значение, пока вы не наткнетесь на второй оператор возврата, скрытый в середине функции.

Я категорически не согласен с утверждениями Клито и Андомара о том, что это все субъективно. Оператор возврата в середине вашей функции - это явно спагетти-код.

0 голосов
/ 03 июня 2009

Классическое определение * кода спагетти - это «код, поток управления которого трудно следовать из-за использования неструктурированного ветвления». Поскольку PHP, как и большинство языков, изобретенных с 1970-х годов, не поддерживает GOTO, теоретически вы не можете писать в него спагетти-код. (Обновление: начиная с версии 5.3 PHP имеет оператор goto, но он все еще несколько ограничен в деструктивном потенциале)

Однако хорошее приближение может быть достигнуто с помощью длинных скриптов и функций, которые свободно используют глобальные переменные. Бонусные баллы за глубоко вложенные, если / elseif / else cascades и плохое форматирование. Добавьте немного дикого смешения HTML, JavaScript, PHP, PHP, который генерирует HTML, и PHP, который генерирует JavaScript, который генерирует HTML , и вы убедитесь, что никто не сможет понять код, даже тот, кто его написал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...