Esiste un numero ottimale di righe di codice per funzione? [chiuso]

18

Le funzioni non sono utilizzate solo per minimizzare la duplicazione del codice, ma sono anche utilizzate per suddividere una funzione lunga in quelle più piccole per aumentare la leggibilità, oltre a rendere il codice auto-commentante. Tuttavia, questo guadagno non è direttamente inversamente proporzionale al numero di LOC per funzione o metodo; altrimenti avremmo tonnellate di funzioni, tutte contenenti solo una singola riga o due di codice.

Questo mi porta a chiedermi: Esiste un numero ottimale di LOC per funzione? In tal caso, che cos'è e devia tra le lingue?

    
posta gablin 04.10.2010 - 22:36
fonte

7 risposte

33

Invece del numero di linee, il criterio che userei è che ogni funzione dovrebbe fare solo una cosa e farla bene.

    
risposta data 04.10.2010 - 22:42
fonte
21

Una vecchia regola del pollice è che una funzione dovrebbe essere interamente visibile sullo schermo, senza necessità di scorrere.

L'idea di base è che, se non puoi guardare l'intera funzione alla volta, la funzione è troppo complessa e dovresti dividerla in parti più elementari.

Sebbene questa regola sia molto pratica e utile, la regola formale è che si dovrebbe mantenere solo un singolo passaggio logico in una funzione. Una funzione fa solo un lavoro elementare, se puoi dividere il lavoro in più pezzi elementari, la funzione deve essere divisa.

    
risposta data 04.10.2010 - 22:39
fonte
15

Non ce n'è.

Gli schermi si ingrandiscono, le dimensioni dei caratteri sono più piccole. Le regole pratiche non funzionano così bene quando le persone hanno pollici di dimensioni diverse.

Sii conciso. Se la tua funzione fa più cose, è probabilmente una buona idea scomporla in quelle più piccole.

    
risposta data 04.10.2010 - 22:41
fonte
6

Smalltalk ha un modo un po 'insolito di ridurre la dimensione dei metodi. Quando scrivi il codice, lo scrivi in un widget chiamato Browser. Un browser ha due parti principali, divise orizzontalmente. Il tuo codice va nella metà inferiore.

Per impostazione predefinita, un browser non è molto grande. Puoi inserire 5 o 6 linee prima che sia necessario iniziare a scorrere. Lo scorrimento, ovviamente, è leggermente irritante.

Quindi in Smalltalk l'ambiente "incoraggia" a scrivere metodi brevi, al massimo di circa 6 righe di lunghezza. (Di solito è abbondante, Smalltalk è un linguaggio piuttosto laconico.)

    
risposta data 05.10.2010 - 08:10
fonte
2

Il numero ideale di linee di codice in un metodo è variabile. In sostanza, si desidera scrivere solo il codice sufficiente per fare ciò che deve essere fatto nel contesto della definizione della funzione. Penso che sia una specie di principio di singola responsabilità , applicato solo a un metodo anziché a una classe.

Se un metodo ha un sacco di logica e un numero di passaggi da completare, allora ha senso suddividere il metodo in diversi passaggi discreti. Ognuno di questi passaggi verrebbe estratto in nuovi metodi come richiesto.

"otherwise we would have tonnes of functions, all of which only contains a single line or two of code."

Meno ogni metodo fa, più è facile definirlo e più semplice da comprendere e gestire. Non c'è niente di sbagliato nell'avere centinaia di metodi se ne hai bisogno. Inoltre, in linea con il SRP di cui ho parlato prima, diventa più facile estrarre nuove classi quando i metodi sono stati messi in relazione pezzi più piccoli e più maneggevoli.

    
risposta data 16.02.2012 - 22:42
fonte
1

La risposta è ovviamente 42 .

Nota importante: nessuna funzione può mai violare il SRP , oppure devi affrontare spanisch inquisition .

Alcuni suggerimenti su come ridurre la quantità di righe:

  • Ci sono commenti che segnano singole sezioni? Queste sezioni dovrebbero essere funzioni.
  • Ci sono if-else catene o istruzioni switch al di fuori di un factory / builder? Il tuo progetto potrebbe necessitare di schemi di progettazione migliori per aiutarti a dividere le responsabilità.
  • Le tue funzioni sono facili da testare? Rendi le tue funzioni facili da testare, cadranno a pezzi.
  • È complesso e non ci sono terre in abbondanza (mostri di 1000 linee)? Rifattiamo i rottami - questo è refactoring e non salvarlo nella speranza di essere istruito sulle responsabilità dei codici.
risposta data 18.03.2013 - 00:42
fonte
0

Ecco alcuni indizi:

  • Se hai problemi a scrivere il commento che spiega lo scopo e l'uso della funzione, è troppo lungo.

  • Se si è tentati di scrivere un commento che spiega l'attività di una sezione di codice nella funzione, la funzione è troppo lunga.

  • Se stai incollando il codice da un'altra funzione, allora sono entrambi troppo lunghi (estrai quel codice come una funzione separata).

  • Se hai bisogno di una convenzione di codifica per separare membri di dati di classe da variabili locali, la funzione è troppo lunga e la classe ha troppi membri.

  • Se hai bisogno di prendere appunti mentre leggi una funzione, è troppo lunga.

Avere "tonnellate" di funzioni, ciascuna solo una o due righe, non è necessariamente una cosa negativa. Ho scoperto che quelle piccole funzioni venivano riutilizzate molto più di quanto inizialmente mi aspettassi.

    
risposta data 16.02.2012 - 21:13
fonte

Leggi altre domande sui tag