quanto grande lunghezza funzione dovrebbe essere (linee di codice in una funzione)? [duplicare]

StackOverflow https://stackoverflow.com/questions/2976834

  •  24-10-2019
  •  | 
  •  

Domanda

Eventuali duplicati:
Quante righe di codice dovrebbe una funzione / procedura di / metodo ha?

Mi piacerebbe sapere quante linee di codice dovrebbe essere la funzione ha? Quante linee è troppo.

Ho letto questo un po 'indietro, ma circa il 10 o 20 linee, ma che era perché lo schermo sarebbe solo ospitare così tante linee. Ora, come le dimensioni dello schermo diventano più grandi, che non avrebbe retto vero.

Supponiamo che il no parte della funzione viene utilizzata altrove vale a dire disprezzo principio DRY.

Mi piacerebbe sentire ciò che gli altri hanno da dire su questo.

Grazie.

Nota : Duplicate of Quando si tratta di una funzione troppo a lungo ? , non riusciva a trovare quando ho postato.

È stato utile?

Soluzione

Questo tipo di domanda è ben risolta in codice completo . Steve McConnel ha scritto un'intera pagina Per rispondere a questa domanda. La sua conclusione:

Decenni di prove dicono che le routine di tale lunghezza (> 100 linee) non sono più soggetto a errori di breve routine. Let questioni come la la coesione di di routine, il numero di decisioni punti, il numero di commenti necessari per spiegare la routine, e gli altri Considerazioni complessità legate dettare la lunghezza della routine piuttosto che imporre una lunghezza restrizione per sé. Detto questo, se si voglia di scrivere più di routine su 200 linee, fare attenzione.

Altri suggerimenti

Le linee sono irrilevanti, ma la complessità è.

funzione A deve eseguire un'operazione, e dovrebbe essere facilmente evidente. Non dovrebbe prendere più di qualche istante per capire esattamente come e cosa fa la funzione.

Si dovrebbe avere il maggior numero di cui ha bisogno.

Non vedo nessun punto nel limitare una line-count funzione per le dimensioni dello schermo (ok per essere onesti, non ho avviare la programmazione fino a dopo schermi potrebbe accaparrarsene più di 10-20 linee - forse questo aveva senso in alcuni ambienti). Basta scrivere la funzione come ha senso. Quando diventa così grande che pezzi di codice iniziano a ripetere, rifattorizzare quei pezzi ad altre funzioni / classi / componenti.

E 'una regola abbastanza arbitrario di pollice. Alcuni, come 20 linee, altri come la regola no-scroll. Alla fine, basta assicurarsi che sia leggibile e facilmente comprensibile a colpo d'occhio. Leggi sul tuo solidi principi e assicurarsi che il metodo ha solo 1 responsabilità , ecc.

Finché necessario, il più breve possibile.

prendo 5-10 linee come regola generale, ma se c'è una logica che non può essere (ri) scomposto facilmente in molteplici funzioni scrivo più dove necessario. D'altra parte ho spesso funzioni che sono solo una riga o due lunghi.

Se non si immedatly capire che cosa una parte di codice non, scrivere una nuova funzione per esso.

Non credo che importa quante linee ha ... finché è efficace.

Qualsiasi codice che può essere riutilizzato in qualsiasi punto della base di codice dovrebbe essere spostato a un'altra funzione / metodo nella stessa classe o di una classe condivisa e chiamato.

Ho sentito le dimensioni dello schermo metrica prima di troppo, ma, ovviamente, non vuole essere un limite rigido o in scala con dimensioni del monitor. E 'solo lo scopo di trasmettere il principio di DRY e che il mantenimento di funzioni più piccolo possibile è uno dei migliori modi per scrivere il codice in grado di scalare (delle dimensioni del progetto).

Il documento di stile Linux Kernel Coding dice:

Le funzioni deve essere breve e dolce, e fare solo una cosa. Dovrebbero stare su uno o due schermate di testo (La dimensione dello schermo ISO / ANSI è 80x24, come tutti sappiamo), e fare una cosa e fare che bene.

Ora, mi rendo conto che è nel contesto del codice del kernel, ma credo che alcuni dei punti rende Re: lunghezza funzione sono valide in generale. Trovare una copia qui . La sezione sulle funzioni è Capitolo 4.

Tutto sommato, la lunghezza funzione non deve essere limitata da una regola artificiale; fattore di roba se ha senso, e perché rende roba più facile da leggere, ma la regola circa 1-2 schermi non è scritto nella pietra.

questo è solo un parere da un oo-prospettiva:

Io preferisco tenere i miei metodi in unità logiche di lavoro e realmente non si preoccupano metriche quali loc. questo lo rende anche abbastanza facile per citarne correttamente i vostri metodi, e li tiene da sempre gonfio.

un esempio funzionale molto banale sarebbe invece di avere una funzione che calcola il Fibonacci sequenza linea in un ciclo avrei aggiungere un successore (int int b,) funzione, che viene chiamato dalla funzione Fibonacci ().

un esempio più complesso di moda oo sarebbe un client HTTP che esegue una richiesta GET. mi piacerebbe rompere che fino in qualcosa di simile a questo:

Connection getConnection(String host, int port)
Request createRequest(String[] params)
void sendRequest(Request r)
String getResponse(Connection c,Request r)

Le funzioni dovrebbe essere esattamente abbastanza piccolo per fare il loro lavoro, ma non più piccola.

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