Domanda

  

Possibile duplicato:
   Quando una funzione è troppo lunga?

Di recente mi è stato affidato il compito non invidiabile di rivedere il codice scadente scritto da un altro sviluppatore e documentare le cattive pratiche. (Questo è tutto allo scopo di uscire dal pagare per il lavoro dello sviluppatore piuttosto che per qualsiasi motivo altruistico, ovviamente!)

Il codice rivisto ha diverse procedure che sono molte righe di codice: la più lunga è di quasi 600 righe. Un paio di problemi con questo che ho pensato sono la manutenibilità e la leggibilità.

Il trucco è che devo giustificare a un laico il motivo per cui questa è una cattiva pratica e, se possibile, sostenerlo con un libro di consultazione ben considerato e attuale. Anche le analogie sono buone.

Qualche idea?

Duplica: Quando una funzione è troppo lunga?
Duplica: La migliore regola per la dimensione massima della funzione?

È stato utile?

Soluzione

Non si tratta di righe di codice. Come Steve Mcconnell e Bob Martin dice (due riferimenti piuttosto validi sulle migliori pratiche di codifica), un metodo dovrebbe fare una cosa e una sola cosa. Comunque molte righe di codice servono per fare una cosa è quante righe dovrebbe avere. Se quello "una cosa" può essere suddiviso in cose più piccole, ognuna di queste dovrebbe avere un metodo.

Buoni indizi che il tuo metodo sta facendo più di una cosa:

  • Più di un livello di rientro in un metodo (indica che troppi rami logici fanno solo una cosa)
  • " Interruzioni di paragrafo " - gli spazi tra gruppi logici di codice indicano che il metodo sta facendo più di una cosa

Solo per citarne alcuni. Bob Martin dice anche di tenerlo intorno alle 10. Personalmente di solito cerco di sparare per 10. Se inizia ad avvicinarsi a 20, quella è una bandiera mentale per prestare maggiore attenzione a quel metodo. Ma alla fine, LoC è una cattiva metrica per praticamente qualsiasi cosa. È solo un indicatore utile che può potenzialmente indicare il vero problema.

Altri suggerimenti

La vera risposta

Non esiste un numero specifico.

Una risposta concreta

Se devi giustificare con un certo numero gli avvocati o qualcosa del genere, scopri il numero massimo di righe che si adattano a una tipica finestra dell'editor di sviluppo nel tuo negozio e usalo.

Pratica generale

Non dovresti nemmeno guardarlo in quel modo, ma non dovrebbe esserci nulla di molto complesso in nessuna funzione.

Ogni unità di lavoro deve essere delegata alla propria unità testabile denominata in modo descrittivo. Fai questo e tutti i tuoi metodi finiscono per essere minuscoli e leggibili senza mai contare le righe ......

L'autore del reato più grande che vedo è 3-4 + condizioni booleane esplose nel mezzo di un'istruzione if. Avvolgi tutto ciò in un booleano con un buon nome, quindi avvolgi tutti i pezzi che lo compongono che sono complessi nel loro.

Prima di tutto, nota che la restrizione di lunghezza è completamente separata dalla solita metrica, che è "la funzione fa solo una cosa e la fa bene?" Se la risposta a questa domanda non è sì, probabilmente la funzione non è valida, indipendentemente dalla lunghezza.

Rilevante specificamente per la lunghezza massima, una citazione da Code Complete, generalmente considerata uno dei migliori libri sull'argomento delle pratiche di codifica:

  

Di tanto in tanto, un algoritmo complesso porterà a una routine più lunga e, in tali circostanze, dovrebbe essere permesso alla routine di crescere organicamente fino a 100-200 linee. (Una riga è una riga senza codice, non vuota del codice sorgente.) Decenni di prove affermano che routine di tale lunghezza non sono più soggette a errori rispetto alle routine più brevi. Lascia che questioni come la profondità della nidificazione, il numero di variabili e altre considerazioni relative alla complessità dettino la lunghezza della routine anziché imporre una limitazione della lunghezza in sé.

     

Se si desidera scrivere routine più lunghe di circa 200 righe, fare attenzione. Nessuno degli studi che hanno riportato una riduzione dei costi, una riduzione dei tassi di errore o entrambi con routine più grandi si sono distinti tra dimensioni superiori a 200 righe e sei tenuto a imbatterti in un limite superiore di comprensibilità quando passi 200 righe di codice.

Sono passati molti anni da quando ho letto questo, ma penso che sia stato in Learning Perl che raccomandano di fare una procedura non più di quanto tu possa adattare tutto sullo schermo in una sola volta. Ho pensato che fosse un buon metro. Ho visto funzioni più lunghe che erano ancora leggibili a causa del codice ripetitivo (ad es. Accesso al database e assegnazione di valori di proprietà), ma quelle sono l'eccezione piuttosto che la norma.

Per aggiungere al punto di Rex, dovrebbe anche essere il più breve possibile. Bob Martin dice 10 o meno

Object Mentor - Quanto dovrebbe essere grande una funzione?

Il minor numero possibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top