Parfois, un algorithme peut être écrit de deux manières:
- La manière courte et sophistiquée; ou
- La manière la plus longue et la plus facile à comprendre.
Par exemple, voici une plus longue, plus facile de copier une chaîne source
à dest
C:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
Et voici une manière courte et fantaisiste.
// Copy string source to dest
while (*dest++ = *source++);
J'ai toujours entendu et lu que le code de fantaisie devrait être évité, et j'ai tendance à être d'accord. Mais que faire si nous tenons compte des commentaires? Supposons que, comme dans les exemples ci-dessus, nous avons un code non commenté, plus long et soi-disant plus facile à comprendre, et un code court et bien commenté? Le code non sophistiqué est-il toujours préféré?
EDIT: Beaucoup ont commenté les noms de variables, j'ai donc modifié l'exemple de code pour ne pas en faire un facteur lors de la préférence sur l'autre. J'ai essayé de supprimer la double affectation dans le premier exemple, mais cela n'a fait que rendre le code moins lisible.
Peut-être que ce n'était pas le meilleur des exemples parce que beaucoup trouvent le code «fantaisie» plus lisible et compréhensible que le code plus long. L'idée était d'avoir un code plus long qui était beaucoup plus facile à comprendre qu'un code très court mais compliqué.
EDIT2: Voici un nouvel exemple que j'ai obtenu de SO :
Version fantaisie commentée:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
Version longue non commentée:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}