Was ist "Code-Versatz"?

11

Im O'Reilly-Buch über Scala habe ich gelesen, dass durch das Einfügen von Code Folgendes entsteht:

... schafft Probleme mit Code-Aufblähung, Wartbarkeit und Versatz ,

Ich kann keine offensichtlichen Definitionen des Wortes Skew im Kontext sehen. Ich bin mir der Probleme beim Einfügen von Kopien bewusst, kann sie jedoch nicht mit dem Wort "Skew" in Einklang bringen. Da dies in einem O'Reilly-Buch verwendet wird, ist es vermutlich ein echter Programmierbegriff, der im Umlauf ist.

Irgendwelche Hinweise?

Joe
quelle

Antworten:

19

Schräglauf bedeutet in seiner traditionellsten Definition nicht ausgerichtet (nicht parallel). Wenn Code kopiert und eingefügt wird, sind die beiden Kopien offensichtlich identisch und parallel. Dies ist keine Invariante. Änderungen an einer Kopie können nicht garantiert auf die andere Kopie übertragen werden (aufgrund von Nachlässigkeit oder Unwissenheit). Jetzt gibt es zwei Codeversionen an zwei verschiedenen Stellen, die schief sind (nicht mehr gleich). Dies kann zu seltsamen Fehlern führen, wenn das Verhalten an einem Ort und nicht am anderen zu funktionieren scheint. Behalten Sie Ihren Code trocken (wiederholen Sie sich nicht).

BEARBEITEN / HINZUFÜGEN: Wenn Sie den Wunsch haben, zu kopieren und einzufügen, sollten Sie den Code, den Sie kopieren, höchstwahrscheinlich in eine gemeinsam genutzte Oberklasse (objektorientiert) oder eine Art enthaltenes Dienstprogramm (funktional) abstrahieren.

Patrick James McDougle
quelle
+1 für eine gute Erklärung. Auch für einige Katharsis - ich muss mich mit einer Codebasis befassen, die aus Hunderten und Hunderten von Zeilen Copy-Paste-Code mit genau dieser Art von Problem besteht, das behoben werden muss.
KChaloux
2

Hast du als Kind jemals das Spiel Telefon gespielt? Weißt du, derjenige, bei dem jede Person einen Satz an die nächste Person in der Reihe flüstert, und am Ende sagt die letzte Person den Satz laut und alle lachen darüber, wie unterschiedlich er vom Original geworden ist? Das ist schief. Wenn Sie Code kopieren und einfügen, nehmen Sie zwangsläufig kleine Änderungen an einer oder mehreren Kopien vor. Und je öfter Sie denselben Code kopieren und einfügen, desto mehr Änderungen werden vorgenommen und der Code wird vom Original abweichen. Ich habe Code mit Hunderten von kopierten und eingefügten Blöcken gesehen, die sich nur um wenige Zeichen voneinander unterscheiden. Es ist fast unmöglich, sie zu pflegen. Wenn Sie einen Codeabschnitt ausschneiden und einfügen möchten, sollten Sie ihn wahrscheinlich zumindest in eine eigene Funktion integrieren.

Jim Nutt
quelle
3
Die Unterschiede sind nicht verursacht durch die Copy-and-Paste. Sie werden verursacht, was nach dem Kopieren und Einfügen passiert.
Stephen C
1
Ganz richtig, aber wenn der Code nicht kopiert und eingefügt worden wäre, wären die Unterschiede nicht aufgetreten.
Jim Nutt
Es ist ein gutes Beispiel, aber die Analogie ist vom Konzept abweichend . In der Analogie erstellt das Einfügen eine andere Kopie, während im eigentlichen Konzept die Kopie dieselbe ist, jedoch nicht synchronisiert wird, wodurch der Versatz verursacht wird.
Sundeep