Co to jest „przekrzywienie kodu”?

11

W książce O'Reilly o Scali przeczytałem, że kopiowanie i wklejanie kodu tworzy:

... tworzy problemy z rozdęciem kodu, łatwością konserwacji i przekrzywieniem ,

Nie widzę żadnych oczywistych definicji tego słowa w kontekście. Mam świadomość problemów z kopiowaniem i wklejaniem, ale nie mogę dopasować ich do słowa „przekrzywienie”. Ponieważ jest to używane w książce O'Reilly, domyślam się, że to prawdziwy termin programowania.

Jakieś wskazówki?

Joe
źródło

Odpowiedzi:

19

Pochylenie w najbardziej tradycyjnej definicji oznacza brak wyrównania (nie równoległy). Oczywiście, gdy kod jest kopiowany i wklejany, dwie kopie są identyczne i równoległe. To nie jest niezmienny. Zmiany dokonane w jednym egzemplarzu nie są gwarantowane, aby przejść do drugiego (z powodu nieostrożności lub ignorancji). Teraz istnieją dwie wersje kodu w dwóch różnych miejscach, które są przekrzywione (już nie takie same). Może to prowadzić do dziwnych błędów, gdy zachowanie wydaje się działać w jednym miejscu, a nie w drugim. Zachowaj swój kod SUCHY (nie powtarzaj się).

EDYCJA / DODAWANIE: Jeśli masz ochotę kopiować i wklejać, bardziej niż prawdopodobne jest to, że powinieneś zrobić abstrakcję kopiowanego kodu do wspólnej nadklasy (obiektowo) lub jakiegoś rodzaju dołączonej funkcji narzędziowej (funkcjonalnej).

Patrick James McDougle
źródło
+1 za dobre wyjaśnienie. Także w przypadku niektórych katharsis - mam do czynienia z bazą kodów składającą się z setek i setek wierszy kodu kopiuj-wklej z dokładnie tego rodzaju problemem, który należy naprawić.
KChaloux
2

Grałeś kiedyś w telefon jako dziecko? Wiesz, ten, w którym każda osoba szepcze zdanie do następnej osoby w kolejce, a na końcu ostatnia osoba mówi to zdanie na głos i wszyscy śmieją się, jak różni się od oryginału? To jest przekrzywienie. Podczas kopiowania i wklejania kodu nieuchronnie wprowadza się niewielkie zmiany w co najmniej jednej kopii. Im częściej kopiujesz i wklejasz ten sam kod, tym bardziej gromadzą się zmiany i kod jest wypaczany względem oryginału. Widziałem kod z setkami skopiowanych i wklejonych bloków, z których każdy różni się zaledwie kilkoma znakami, jest to prawie niemożliwe do utrzymania. Jeśli chcesz wyciąć i wkleić sekcję kodu, prawdopodobnie powinieneś przynajmniej rozważyć włączenie jej do własnej funkcji.

Jim Nutt
źródło
3
Różnice nie są spowodowane kopiowaniem i wklejaniem. Są one spowodowane tym, co dzieje się po skopiowaniu i wklejeniu.
Stephen C
1
To prawda, ale gdyby kod nie został skopiowany i wklejony, różnice nie wystąpiłyby.
Jim Nutt
To dobry przykład, ale analogia jest wypaczona z koncepcji. Analogicznie pasta tworzy inną kopię, podczas gdy w rzeczywistej koncepcji kopia jest taka sama, ale nie jest zsynchronizowana, co powoduje przekrzywienie.
Sundeep,