บางครั้งอัลกอริทึมสามารถเขียนได้สองวิธี:
- วิธีที่สั้นและแฟนซี หรือ
- วิธีที่ยาวและง่ายต่อการเข้าใจ
ยกตัวอย่างเช่นที่นี่เป็นอีกต่อไปวิธีที่ง่ายของการคัดลอกสตริงsource
ไปdest
ใน C:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
และนี่เป็นวิธีที่สั้นและแฟนซี
// Copy string source to dest
while (*dest++ = *source++);
ฉันเคยได้ยินและอ่านเสมอว่าควรหลีกเลี่ยงรหัสแฟนซีและฉันมักจะเห็นด้วย แต่ถ้าเราคำนึงถึงความคิดเห็นล่ะสมมติว่าในตัวอย่างข้างต้นเรามีโค้ดที่ไม่มีโค้ดที่เข้าใจง่ายยาวกว่าและเข้าใจง่ายกว่าและมีโค้ดที่สั้นและเข้าใจง่าย รหัสที่ไม่ใช่แฟนซียังคงเป็นที่ต้องการหรือไม่
แก้ไข:หลายคนมีความคิดเห็นเกี่ยวกับชื่อตัวแปรดังนั้นฉันได้แก้ไขโค้ดตัวอย่างเพื่อไม่ให้เป็นปัจจัยเมื่อเลือกมากกว่าอีก ฉันพยายามลบการบ้านสองครั้งในตัวอย่างแรก แต่นั่นทำให้รหัสไม่สามารถอ่านได้
บางทีนี่อาจไม่ใช่ตัวอย่างที่ดีที่สุดเพราะหลายคนพบว่าโค้ด 'แฟนซี' สามารถอ่านและเข้าใจได้ง่ายกว่าโค้ดที่ยาวกว่า แนวคิดก็คือมีรหัสที่ยาวขึ้นหนึ่งรหัสซึ่งง่ายต่อการเข้าใจมากกว่ารหัสสั้น ๆ แต่ซับซ้อน
EDIT2:นี่เป็นตัวอย่างใหม่ที่ฉันได้จากSO :
ความคิดเห็นเวอร์ชั่นแฟนซี:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
รุ่นที่ไม่มีความคิดเห็นยาว:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}