Sto cercando di migliorare la leggibilità di una lunga funzione C ++. Questa funzione contiene un numero (> una dozzina) di variabili che vengono utilizzate in tutto. La logica principale del codice è una lunga lista di controlli di condizione (a volte annidati, a volte con loop) seguiti da varie azioni. A causa del lungo numero di righe che dettagliano le azioni da eseguire mescolate con la colla logica / ciclica, può essere piuttosto difficile seguire quello che sta succedendo. Non esiste un modo semplice per sifonare queste azioni in funzioni separate senza firme di funzioni arbitrarie e brutte che notino qualsiasi sottoinsieme di variabili che sia necessario. Una soluzione drastica potrebbe essere quella di sostituire la funzione con una classe singleton, con le variabili e le sotto-azioni della funzione che diventano variabili membro privato e membro privato. Tuttavia, sto cercando un'alternativa più semplice. La mia idea è di definire una lista di azioni nella parte superiore della mia funzione attraverso le funzioni lambda, e quindi di seguito eseguire la logica della funzione usando questi lambda una tantum. Questo sembrerebbe qualcosa di simile (interamente schematicamente);
void function() {
// variables
int a, b, c, d, ...;
// actions to be performed
auto func1 = [&] () { ... code using a,b, etc. };
auto func2 = [&] () { ... };
auto func3 = [&] () { ... };
...
// main logic
if (<condition 1>) {
if (<condition 2>)
func1();
else
func2();
} else {
func2();
func3();
}
... // etc
}
Queste funzioni lambda occasionalmente salvano il codice, nei casi in cui sostituiscono frammenti di codice ripetuti, ma in genere migliorano la leggibilità, almeno ai miei occhi. È una buona pratica in generale? Gli altri ritengono che ciò migliori la leggibilità e qual è il costo dell'utilizzo di queste funzioni lambda?