Manchmal kann ein Algorithmus auf zwei Arten geschrieben werden:
- Der kurze, schicke Weg; oder
- Der längere, leicht verständliche Weg.
Zum Beispiel, hier ist ein längerer, einfacher Weg , um eine Zeichenfolge zu kopieren , source
um dest
in C:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
Und hier ist ein kurzer, ausgefallener Weg.
// Copy string source to dest
while (*dest++ = *source++);
Ich habe immer gehört und gelesen, dass ausgefallener Code vermieden werden sollte, und ich stimme eher zu. Was aber, wenn wir Kommentare berücksichtigen? Angenommen, wir haben wie in den obigen Beispielen einen unkommentierten, längeren und angeblich leichter verständlichen Code und einen gut kommentierten, kurzen, ausgefallenen Code? Wird der unkonventionelle Code weiterhin bevorzugt?
BEARBEITEN: Viele haben Variablennamen kommentiert, deshalb habe ich den Beispielcode geändert, um dies nicht zu einem Faktor zu machen, wenn Sie den anderen vorziehen. Ich habe versucht, die doppelte Zuweisung im ersten Beispiel zu entfernen, aber das hat den Code nur weniger lesbar gemacht.
Vielleicht war dies nicht das beste Beispiel, weil viele den "ausgefallenen" Code lesbarer und verständlicher finden als den längeren Code. Die Idee war, einen längeren Code zu haben, der viel einfacher zu verstehen war als ein sehr kurzer, aber komplizierter Code.
EDIT2: Hier ist ein neues Beispiel, das ich von SO bekommen habe :
Kommentierte Fantasieversion:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
Nicht kommentierte Langfassung:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}