2012-11-06 9 views
8

Questa è solo una domanda di aiuto generale, sto cercando di sapere Qual è il vantaggio di avere una serie di piccole funzioni nel codice di un'applicazione C++ rispetto a una lunga funzione complessa contenente tutte le istruzioni necessarie per risolvere un problema?Qual è il vantaggio di rompere un codice in diverse piccole funzioni in C++?

+18

Manutenibilità. Comprensibilità. Riusabilità. Debuggability. –

+0

più importante l'estensibilità di @KerrekSB –

+0

Aggiungerei anche la facilità di test, che tende a generare tutti gli altri già nominati, nella mia esperienza. – eh9

risposta

18

Modifica Il credito per questo mnemonico va ai commentatori nell'OP.

Rompere le grandi funzioni in più di quelle più piccole può portare a MURDER! Che, in questo caso, potrebbe essere una buona cosa. :)

M-Maintainability. Le funzioni più piccole e più semplici sono più facili da mantenere.

U - Comprensibilità. Le funzioni più semplici sono più facili da capire.

R - Riutilizzabilità. Incoraggia il riutilizzo del codice spostando le operazioni comuni in una funzione separata.

D-Debugability. È più facile eseguire il debug di funzioni semplici rispetto a quelle complesse.

E - Estendibilità. Il riutilizzo del codice e la manutenibilità portano a funzioni che sono più facili da refactoring in 6 mesi.

R - Regressione. Riutilizzo e modularizzazione portano a test di regressione più efficaci.


Ci sono alcuni benefici potenziali per rompere grandi funzioni fino a funzioni più piccoli. Nell'ordine in cui sono caduti dal mio cervello:

  1. Incoraggia il riutilizzo del codice. Spesso in grandi funzioni devi fare più o meno la stessa cosa molte volte. Generando questo in un'unica funzione comune, è possibile utilizzare quel blocco di codice in più posizioni.

  2. Il riutilizzo del codice può essere di aiuto in robustezza e manutenibilità isolando potenziali bug in un posto anziché in più.

  3. È più facile comprendere la semantica della funzione quando ci sono meno righe di codice e un sacco di chiamate a funzioni ben definite.

  4. Se si è contrari alle funzioni con più punti di ritorno, interrompere le grandi funzioni può ridurle.

  5. Aiuta a identificare e isolare (potenziali) problemi con dipendenze di dati sottili che altrimenti sono difficili da notare.

E 'importante notare, tuttavia, che si prende il bene con il male con questo. Ci sono anche alcuni svantaggi potenziali per rompere grandi funzioni up:

  1. Se la grande funzione lavorato prima, cercando di modularizzazione si possono creare difetti.

  2. Nelle applicazioni multithreadded, è possibile introdurre deadlock e condizioni di gara se le politiche di sincronizzazione sono impercettibili o semplicemente errate.

  3. È possibile introdurre un riscontro di prestazioni dalle chiamate di funzione.

+0

Grazie mille – Mody

3

Codice più chiaro che significa che è più facile da capire e mantenere.

+0

Grazie, risposta molto semplice e chiara – Mody

0

Una grande funzione complessa è proprio questa: complessa.

La suddivisione del codice in funzioni separate semplifica il lavoro del codice. Innanzitutto, quando si cerca la parte di codice che esegue una determinata attività, sarà più facile trovarla se si trova nella propria funzione.

In secondo luogo, apportare modifiche a una funzione è molto più semplice quando è semplice: non è necessario comprendere una grande quantità di codice per modificare tale funzione.

Inoltre, potrebbe essere più facile riutilizzare quel codice in un altro progetto quando è suddiviso in funzioni più piccole che possono essere utilizzate per scopi diversi dalla semplice funzione singola grande.

0

I vantaggi di dividere un programma in molteplici funzioni sono:

  • maggior parte dei programmi hanno alcune funzionalità di base che è necessario in più luoghi. Avere quella funzionalità in una funzione separata significa che è più ovvio quando viene utilizzata la stessa funzionalità e devi risolvere i problemi solo una volta sola.
  • Dividendo un programma in funzioni, è possibile introdurre più livelli di astrazione nel codice. Nella funzione principale si ottiene un'ampia panoramica di ciò che fa il programma e ogni livello in basso sull'albero delle chiamate rivela più dettagli su come vengono realizzati determinati aspetti.
0

Nei sistemi di dispositivi medici, il codice di interruzione in parti più piccole riduce la necessità di test di regressione e restringe gli effetti del cambiamento a un ambito più piccolo.

Ad esempio, supponiamo di avere 15 funzioni per 3 temi in un unico file.

Se cambio una delle funzioni nel file, tutto deve essere ricostruito e ritestato.
Se divido il file in 3 file separati di 5 funzioni ciascuno, ho solo bisogno di ricostruire 5 funzioni e ripetere il test di 5 funzioni. Il test di 5 funzioni richiede meno tempo di test rispetto a 15 funzioni.

Inoltre, quando gruppi di persone lavorano sullo stesso codice base, la divisione del codice riduce la probabilità che due o più persone lavorino sullo stesso file. Più persone che lavorano sullo stesso file hanno molti conflitti, come il codice di una persona che viene accidentalmente rimosso durante il check-in.

Problemi correlati