เพื่อประโยชน์ของการโต้แย้งนี่คือตัวอย่างฟังก์ชั่นที่พิมพ์เนื้อหาของไฟล์ที่กำหนดทีละบรรทัด
รุ่น 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
ฉันรู้ว่าขอแนะนำให้ฟังก์ชั่นทำสิ่งหนึ่งที่ระดับหนึ่งของสิ่งที่เป็นนามธรรม สำหรับฉันแม้ว่าโค้ดด้านบนจะทำสิ่งหนึ่งและค่อนข้างปรมาณู
หนังสือบางเล่ม (เช่น Clean Code ของ Robert C. Martin) ดูเหมือนจะแนะนำให้แบ่งรหัสด้านบนออกเป็นฟังก์ชันแยกต่างหาก
รุ่น 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;
}
ฉันเข้าใจสิ่งที่พวกเขาต้องการบรรลุ (เปิดไฟล์ / อ่านบรรทัด / พิมพ์บรรทัด) แต่มันไม่ได้เกินความจริงหรือ?
รุ่นดั้งเดิมนั้นเรียบง่ายและในบางแง่มุมก็ทำสิ่งหนึ่งแล้ว - พิมพ์ไฟล์
รุ่นที่สองจะนำไปสู่ฟังก์ชั่นขนาดเล็กจำนวนมากซึ่งอาจจะอ่านได้ง่ายกว่ารุ่นแรก
ในกรณีนี้จะดีกว่าไหมหากมีรหัสในที่เดียว
กระบวนทัศน์ "สิ่งที่หนึ่ง" กลายเป็นอันตราย ณ จุดใด
printFile
, และในที่สุดก็printLines
printLine