2009-06-03 19 views
5

Ho visto "spaghetti" lanciati molto e voglio solo una chiara spiegazione su cosa sia codice spaghetti e cosa non è. Solo perché preferirei non farlo.Definizione di spaghetti php?

I riferimenti in PHP potrebbero essere d'aiuto in quanto è la mia lingua preferita.

+0

Duplicato: http://stackoverflow.com/questions/195520/what-is-spaghetti-code –

+0

Il mio chiedeva un esempio specifico PHP –

risposta

9

Il termine "codice spaghetti" non è affatto specifico per PHP - si applica a tutti i linguaggi di programmazione e dovrebbe apparire abbastanza simile nella maggior parte delle lingue (almeno dello stesso paradigma). Forse lo capisci comunque, e vuoi solo un esempio in PHP.

Il Wikipedia article su questo argomento sembra abbastanza chiaro:

spaghetti code è un termine peggiorativo per il codice sorgente che ha un complesso e aggrovigliato struttura di controllo, in particolare uno con molti GOTO, eccezioni, le discussioni , o altri costrutti ramificati "non strutturati". Si chiama così perché il flusso di programma tende ad assomigliare ad una ciotola di spaghetti , cioè attorcigliato e attorcigliato. Il codice spaghetti può essere causato da diversi fattori, tra cui programmatori inesperti e un programma complesso che è stato modificato ininterrottamente su un ciclo di lunga durata . Programmazione strutturata notevolmente diminuito l'incidenza del codice spaghetti .

questo thread del forum, Top 100 Signs That I Am Writing Spaghetti Code in PHP, potrebbe essere di qualche utilità per voi, in quanto si riferisce specificamente a PHP.

4

Ecco una definizione abbastanza decente di spaghetti code.

È un termine soggettivo che viene utilizzato per descrivere il codice che è eccessivamente convoluto, mal strutturato, difficile da seguire, incoerente, dipendente da effetti collaterali (in particolare effetti collaterali globali) o una combinazione di questi.

PHP, come la maggior parte dei linguaggi di scripting, è tipicamente digitato. Non è necessario dichiarare variabili prima di utilizzarle. Molte variabili sono utilizzate in un ambito "globale" e ci sono disposizioni per includere implicitamente i file (autoloading), solo per citarne alcuni. Nessuna di queste è una brutta caratteristica, ma, se utilizzate male, possono facilmente portare al codice spaghetti.

+0

+1 per fare affidamento su globale variabili e condizioni ambientali. Anche a me sembra sempre una grande ciotola di pasta. – person27

11

La differenza è il codice spaghetti è scritto da altri sviluppatori. Il tuo codice non è mai codice spaghetti.

+0

così vero. : D –

+0

Davvero non vedo come questa risposta sia così utile! – Noldorin

+4

@Noldorin Non è divertente. –

0

Il codice classical definition di spaghetti è "codice il cui flusso di controllo è difficile da seguire a causa dell'uso di diramazioni non strutturate". Dal momento che PHP, come la maggior parte dei linguaggi inventati dagli anni '70 non supporta GOTO, in teoria non è possibile scrivere codice spaghetti in esso. (Aggiornamento: Dal 5.3, PHP ha un'istruzione goto, ma è ancora un po 'limitato in potenziale distruttivo)

Tuttavia, una buona approssimazione può essere raggiunta con lunghi script e funzioni che fanno un uso liberale delle variabili globali. Punti bonus per deeply nested if/elseif/else cascades e formattazione errata. Aggiungi un mix selvaggio di HTML, JavaScript, PHP, PHP che genera HTML e PHP which generates JavaScript which generates HTML e assicurati che nessuno possa capire il codice, nemmeno la persona che lo ha scritto.

+0

A partire da 5.3.0 PHP contiene Gotos. – mjsa

+0

@mjsa: Beh, almeno è limitato. –

0

In un codice ben scritto dovresti essere in grado di seguire chiaramente il flusso non solo dall'inizio alla fine ma anche dalla fine all'avvio (a meno che non si verifichi una condizione di errore irreversibile, nel qual caso il gestore deve avere l'output backtrace). Seguire la regola di un ingresso e una di uscita per ogni funzione.

Un modo per evitare spaghetti code è assicurarsi che l'istruzione return è l'ultima cosa che si scrive in una funzione e che non hai mai avere un ritorno prima di quello.

Se una funzione restituisce un valore imprevisto, codice pulito permetterebbe di avviare la dichiarazione di ritorno e lavorare a ritroso per vedere dove ha ottenuto il suo valore. Tuttavia, se il codice è di spaghetti quindi circa la metà del tempo si ore perplesso su come la funzione potrebbe essere tornando tale valore fino a quando vi capita di imbattersi in quel secondo istruzione return sepolto nel mezzo della funzione di rifiuti.

Sono fortemente in disaccordo con il cleto e le affermazioni di Andomar che è tutte soggettive. Una dichiarazione di ritorno nel mezzo della tua funzione è chiaramente codice spaghetti.

0

Michael Borgwardt, Per qualche ragione goto è stato aggiunto a PHP 5.3: http://us2.php.net/goto

non ho visto una buona ragione per cui è stato aggiunto. Non vedo che sia utile, personalmente

+2

È possibile fare clic su 'aggiungi commento' sotto ogni risposta per rispondere specificamente a quella risposta, invece di aggiungere una nuova risposta senza alcun contenuto di risposta iniziale, per riferimento futuro. –

+2

Ho provato ma ha detto che ho bisogno di 50 reputazione per commentare. –

+0

Avrei sottolineato la stessa cosa che hai fatto quando ho visto la risposta per la prima volta, ma non ho potuto farlo per lo stesso motivo. Penso che sia molto sciocco che tu possa lasciare una risposta, ma non un commento, anche se sono entrambi praticamente uguali poteri. Inoltre è così difficile ottenere punti quando sei appena agli inizi, quindi ti ho dato un po '. :) – Gerry