Demi argumen, inilah fungsi sampel yang mencetak konten file yang diberikan baris demi baris.
Versi 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Saya tahu direkomendasikan bahwa fungsi melakukan satu hal pada satu tingkat abstraksi. Bagi saya, meskipun kode di atas tidak cukup banyak satu hal dan cukup atom.
Beberapa buku (seperti Kode Bersih Robert C. Martin) tampaknya menyarankan memecah kode di atas menjadi fungsi yang terpisah.
Versi 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;
}
Saya mengerti apa yang ingin mereka capai (buka file / baca baris / print line), tetapi bukankah itu sedikit berlebihan?
Versi aslinya sederhana dan dalam beberapa hal sudah melakukan satu hal - mencetak file.
Versi kedua akan menghasilkan sejumlah besar fungsi yang sangat kecil yang mungkin jauh lebih tidak terbaca dari versi pertama.
Bukankah, dalam hal ini, lebih baik memiliki kode di satu tempat?
Pada titik mana paradigma "Do One Thing" menjadi berbahaya?
printFile
, printLines
dan akhirnya printLine
.