Por uma questão de argumento, aqui está uma função de exemplo que imprime o conteúdo de um determinado arquivo linha por linha.
Versão 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Eu sei que é recomendado que funções façam uma coisa em um nível de abstração. Para mim, embora o código acima faça praticamente uma coisa e seja bastante atômico.
Alguns livros (como o Código Limpo de Robert C. Martin) parecem sugerir a quebra do código acima em funções separadas.
Versão 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;
}
Entendo o que eles querem alcançar (arquivo aberto / linhas de leitura / linha de impressão), mas não é um pouco exagerado?
A versão original é simples e, em certo sentido, já faz uma coisa - imprime um arquivo.
A segunda versão levará a um grande número de funções realmente pequenas, que podem ser bem menos legíveis que a primeira versão.
Nesse caso, não seria melhor ter o código em um só lugar?
Em que momento o paradigma "uma coisa" se torna prejudicial?
printFile
, printLines
e, finalmente printLine
.