Per amor di argomenti, 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 è consigliabile che le funzioni facciano una cosa a un livello di astrazione. Per me, anche se il codice sopra fa praticamente una cosa ed è abbastanza atomico.
Alcuni libri (come il Codice pulito 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 (file aperto / linee di lettura / linea di stampa), ma non è un po 'eccessivo?
La versione originale è semplice e in un certo senso fa già una cosa: stampa un file.
La seconda versione porterà a un gran numero di funzioni veramente piccole che potrebbero essere molto meno leggibili rispetto alla prima versione.
Non sarebbe, in questo caso, meglio avere il codice in un posto?
A che punto il paradigma "Do One Thing" diventa dannoso?