A volte un algoritmo può essere scritto in due modi:
- Il modo breve e elegante; o
- Il modo più lungo e di facile comprensione.
Ad esempio, ecco un modo più lungo e più semplice di copiare una stringa source
in dest
in C:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
Ed ecco un modo breve e di fantasia.
// Copy string source to dest
while (*dest++ = *source++);
Ho sempre sentito e letto che il codice di fantasia dovrebbe essere evitato e tendo ad essere d'accordo. E se prendessimo in considerazione i commenti? Supponiamo che, come negli esempi sopra, abbiamo un codice non commentato, più lungo e presumibilmente più facile da capire, e un codice ben commentato, breve e di fantasia? Il codice non di fantasia è ancora preferito?
EDIT: Molti hanno commentato i nomi delle variabili, quindi ho modificato il codice di esempio in modo da non considerarlo un fattore quando preferisco all'altro. Ho provato a rimuovere la doppia assegnazione nel primo esempio, ma ciò ha reso il codice meno leggibile.
Forse questo non era il migliore degli esempi perché molti trovano il codice "elaborato" più leggibile e comprensibile del codice più lungo. L'idea era di avere un codice più lungo che fosse molto più facile da capire di un codice molto breve ma complicato.
EDIT2: Ecco un nuovo esame che ho ricevuto da SO :
Versione fantasia commentata:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
Versione lunga non commentata:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}