Ho fatto delle ricerche qui e non ho trovato nulla di simile, quindi vado avanti e chiedo. Questo è molto più sulla semantica di una vera domanda di programmazione. Attualmente sto scrivendo qualcosa in C++ ma la lingua non ha molta importanza.quanto dovrebbe essere breve una funzione?
Sono ben consapevole del fatto che è buona pratica di programmazione mantenere le proprie funzioni/metodi il più brevi possibile. Eppure come fai a sapere se una funzione è troppo lunga? In alternativa, è mai possibile interrompere troppo le funzioni?
Il primo linguaggio di programmazione che ho appreso (oltre a Applesoft BASIC, che non conta ...) era 6502 linguaggio assembly, in cui velocità e ottimizzazione sono tutto. Nei casi in cui un numero di cicli conta i tempi dell'intero programma, spesso è meglio impostare una posizione di memoria o registrare direttamente piuttosto che saltare a un'altra subroutine. La prima operazione potrebbe richiedere 3 o 4 cicli, mentre, nel complesso, quest'ultima potrebbe impiegarne due o tre volte.
Mentre mi rendo conto che al giorno d'oggi se dovessi menzionare il conteggio dei cicli ad alcuni programmatori mi darebbero solo un'occhiata vuota, è un'abitudine difficile da rompere.
In particolare, diciamo che (ancora una volta utilizzando C++) abbiamo un metodo di classe privata che è qualcosa di simile al seguente:
int Foo::do_stuff(int x) {
this->x = x;
// various other operations on x
this->y = this->x;
}
Ho visto alcuni argomenti che, per lo meno, ogni serie di azioni dovrebbero essere la sua funzione Ad esempio, do_stuff() dovrebbe in teoria essere chiamato a set_x (int x), una funzione separata dovrebbe essere scritta per l'insieme di operazioni eseguite sul membro della classe x, e una terza funzione dovrebbe essere scritta per assegnare il valore finale del membro della classe x al membro della classe y. Ma ho visto altri argomenti che ogni operazione dovrebbe avere una sua funzione.
Per me, questo sembra solo sbagliato. Di nuovo, sto guardando le cose da una prospettiva interna; ogni chiamata al metodo sta spingendo un indirizzo nello stack, eseguendo le sue operazioni, quindi ritornando dalla subroutine. Sembra solo un sovraccarico per qualcosa di relativamente semplice.
Esiste una best practice per questo genere di cose o dipende più dal giudizio individuale?
Grazie, questo è decisamente utile. C++ non è affatto il mio primo linguaggio non di assemblaggio, ma dal momento che non ho mai avuto alcun addestramento formale in qualcosa ho pensato che fosse meglio avere un feedback sulle pratiche di codifica. – xobicvap
+1 per dire di non preoccuparti dei cicli fino a quando non è un problema. L'ottimizzazione prematura è la radice di tutto il male. – riwalk