Comprendo l'importanza di un codice ben documentato. Ma capisco anche l'importanza del codice auto-documentante . Più è facile leggere visivamente una particolare funzione, più velocemente possiamo passare durante la manutenzione del software.
Detto questo, mi piace separare le grandi funzioni da altre più piccole. Ma lo faccio fino al punto in cui una classe può averne fino a cinque solo per servire un metodo pubblico. Ora moltiplica cinque metodi privati per cinque metodi pubblici e otterrai circa venticinque metodi nascosti che probabilmente verranno chiamati solo una volta da quei metodi pubblici.
Certo, ora è più facile leggere quei metodi pubblici, ma non posso fare a meno di pensare che avere troppe funzioni sia una cattiva pratica.
[Modificare]
La gente mi ha chiesto perché penso che avere troppe funzioni sia una cattiva pratica.
La semplice risposta: è una sensazione viscerale.
La mia convinzione non è, per un po ', supportata da nessuna ora di esperienza di ingegneria del software. È solo un'incertezza che mi ha dato un "blocco dello scrittore", ma per un programmatore.
In passato, ho programmato solo progetti personali. È solo di recente che sono passato a progetti basati su team. Ora voglio assicurarmi che gli altri possano leggere e comprendere il mio codice.
Non ero sicuro di cosa migliorerà la leggibilità. Da un lato, stavo pensando di separare una grande funzione in altre più piccole con nomi intelligibili. Ma c'era un altro lato di me che diceva che è solo ridondante.
Quindi, sto chiedendo questo per illuminarmi per scegliere la strada giusta.
[Modificare]
Di seguito, ho incluso due versioni di come ho potuto risolvere il mio problema. Il primo lo risolve non separando grossi blocchi di codice. Il secondo fa cose separate.
Prima versione:
public static int Main()
{
// Displays the menu.
Console.WriteLine("Pick your option");
Console.Writeline("[1] Input and display a polynomial");
Console.WriteLine("[2] Add two polynomials");
Console.WriteLine("[3] Subtract two polynomials");
Console.WriteLine("[4] Differentiate two polynomials");
Console.WriteLine("[0] Quit");
}
Seconda versione:
public static int Main()
{
DisplayMenu();
}
private static void DisplayMenu()
{
Console.WriteLine("Pick your option");
Console.Writeline("[1] Input and display a polynomial");
Console.WriteLine("[2] Add two polynomials");
Console.WriteLine("[3] Subtract two polynomials");
Console.WriteLine("[4] Differentiate two polynomials");
Console.WriteLine("[0] Quit");
}
Negli esempi precedenti, quest'ultimo chiama una funzione che verrà utilizzata una sola volta per tutto il tempo di esecuzione del programma.
Nota: il codice sopra è generalizzato, ma ha la stessa natura del mio problema.
Ora, ecco la mia domanda: quale? Scelgo il primo o il secondo?