Per ragioni di argomento, ecco una funzione di esempio che stampa il contenuto di un determinato file riga per riga.
Versione 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
So che si raccomanda che le funzioni facciano una cosa ad un livello di astrazione. Per me, anche se il codice sopra fa praticamente una cosa ed è abbastanza atomico.
Alcuni libri (come il Clean Code di Robert C. Martin) sembrano suggerire di suddividere il codice sopra in funzioni separate.
Versione 2:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
printLines(file);
}
void printLines(fstream & file) {
string line;
while (std::getline(file, line)) {
printLine(line);
}
}
void printLine(const string & line) {
cout << line << endl;
}
Capisco cosa vogliono ottenere (apri il file / leggi le righe / stampa la riga), ma non è un po 'eccessivo?
La versione originale è semplice e in un certo senso fa già una cosa: stampare un file.
La seconda versione porterà a un numero elevato di funzioni molto piccole che potrebbero essere molto meno leggibili rispetto alla prima versione.
Non sarebbe, in questo caso, meglio avere il codice in un unico posto?
A che punto il paradigma "Do One Thing" diventa dannoso?
printFile
, printLines
e, infine printLine
.