Bazen bir algoritma iki şekilde yazılabilir:
- Kısa, süslü bir yol; veya
- Daha uzun, anlaşılması kolay yol.
Örneğin, burada bir dize kopyalama daha uzun, daha kolay bir yoldur source
için dest
C:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
Ve işte kısa, süslü bir yol.
// Copy string source to dest
while (*dest++ = *source++);
Ben her zaman duydum ve fantezi kodu kaçınılması gerektiğini okudum ve kabul etme eğilimindedir. Peki ya yorumları dikkate alırsak? Yukarıdaki örneklerde olduğu gibi, kabul edilmemiş, daha uzun ve sözde anlaşılması daha kolay bir kodumuz ve iyi yorumlanmış, kısa, süslü bir kodumuz olduğunu varsayın? Süslü olmayan kod hala tercih ediliyor mu?
EDIT: Birçok değişken adları yorumladı, bu yüzden diğer bir tercih tercih ederken bir faktör yapmak değil örnek kod değiştirdim. İlk örnekte çift atamayı kaldırmaya çalıştım, ancak bu yalnızca kodu daha az okunabilir hale getirdi.
Belki de bu en iyi örnek değildi çünkü çoğu 'fantezi' kodu daha uzun koddan daha okunabilir ve anlaşılır buluyor. Fikir, anlaşılması çok kısa ama karmaşık bir koddan çok daha kolay olan daha uzun bir koda sahip olmaktı.
EDIT2: İşte aldığım yeni Examle var SO :
Yorumlanan fantezi sürüm:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
Yorum yapılmamış uzun versiyon:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}