引数のために、指定されたファイルの内容を行ごとに出力するサンプル関数を次に示します。
バージョン1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
関数は、抽象化の1つのレベルで1つのことを行うことが推奨されることを知っています。私にとっては、上記のコードはほとんど1つのことを行い、かなりアトミックです。
一部の書籍(Robert C. MartinのClean Codeなど)では、上記のコードを個別の機能に分割することを提案しているようです。
バージョン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;
}
私は彼らが何を達成したいのか理解しています(ファイルを開く/行を読む/行を印刷する)が、ちょっとやり過ぎではないでしょうか?
元のバージョンはシンプルで、ある意味で既に1つのことを行っています-ファイルを印刷します。
2番目のバージョンは、最初のバージョンよりもはるかに読みにくい多数の非常に小さな関数につながります。
この場合、コードを1か所に配置した方が良いと思いませんか?
「Do One Thing」パラダイムはどの時点で有害になりますか?
printFile
、printLines
最終的には、とprintLine
。