Wpis z mikrobloga

Programiści, czy duplikacja kodu to jest aż taki grzech? Rozumiem, że czysty kod jest ważny, ale w momencie kiedy spędzam nad zadaniem kilkanaście godzin oczekuję jakiegoś bardziej merytorycznego przeglądu kodu: czy architektura się zgadza, czy nie ma rażących błędów, a tymczasem gość już któreś review zaczyna od tego, że wyciąga zduplikowane części kodu. Mania na maksymalną abstrakcję to jest codzienność u każdego szanującego się programisty, czy trafiłem na #codenazi? Czy presja czasu (np. koniec sprintu) może być usprawiedliwieniem takiego niechlujstwa czy jednak powinno się utrzymywać kod w świetnym stanie za cenę opóźnień?
#programowanie #codereview
  • 17
  • Odpowiedz
@kornfan: Duplikacja jest problematyczna w momencie kiedy trzeba coś zmienić w logice, którą sobie kopiuj-wklejasz. W dwóch miejscach jeszcze ogarniesz, ale potem to już bardzo bug-genne jest.
  • Odpowiedz
@kornfan: to zależy o co on się czepia. Jak robisz te same obliczenia w kilku miejscach, to słabo. Jak masz dwie-trzy linijki po sobie które można teoretycznie zamienić na pętlę, to nie boli tak bardzo. Jak masz kilka podobnych klas, a gościu chce na tobie wymusić generowanie kodu w runtime, to niech się jebnie w głowę.
  • Odpowiedz
@kornfan: wg mnie nie istnieje odpowiedź na to pytanie, zależy od konkretnych przypadków.
Ogólne zasady żeby nie duplikować oraz że zła abstrakcja jest gorsza od duplikowania są pewnym defaultem dla większości przypadków i są sytuacje, że te zasady się nie sprawdzają. Wszędzie powinien wygrywać zdrowy rozsądek.
  • Odpowiedz
Czy presja czasu (np. koniec sprintu) może być usprawiedliwieniem takiego niechlujstwa czy jednak powinno się utrzymywać kod w świetnym stanie za cenę opóźnień?


@kornfan: nie, bo w praktyce taka prowizorka, bo termin ciśnie częściej lub rzadziej zostaje w kodzie na stałe.

Co do samego zagadnienia - zduplikowanego kodu należy unikać, to duży problem w szczególnie w większych projektach, bo często powoduje to problemy gdy trzeba coś zmienić i zostanie to zrobione
  • Odpowiedz
@kornfan: Koleś chyba jest nie normalny. Linijka 120: $xyz = $wp->xyz(); Linijka 345: $xyz = $wp->xyz();
To też jest z duplikowane, więc powinieneś w linijce 345 zrobić odwołanie do innej funkcji lub klasy. ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@razornfs: Tam jest o specyficznym typie duplikacji, gdzie abstrakcja jeszcze nie istnieje i tworzy się ją tylko dlatego, że podobny kod się powtarza. Z istniejącymi abstrakcjami jest inaczej - nie należy pisać kodu, który ją powiela, a jeśli później abstrakcja okaże się niewystarczająca dla danego przypadku to można zacząć refactoring od jej zduplikowania zamiast dodawać do niej flagi i warunki.
  • Odpowiedz
@kornfan: Jest i nie jest. Przy systemach rozproszonych i SOA duplikacja nie jest zła, ponieważ umożliwia ci modyfikowanie i rozwijanie rzeczy niezależnie. Gdybyś oparł np 150 mikroserwisów na jednym corze który chcesz potem zmienić (nie łatać ale zmienić to jak działa), musisz albo nie aktualizować albo zaktualizować 150 apek. Z 2 strony jest zła jeśli pewne zadania są powtarzalne a mimo to kopiujemy logikę wielokrotnie. Ale i to nie zawsze :D
  • Odpowiedz
@kornfan:

Mania na maksymalną abstrakcję to jest codzienność u każdego szanującego się programisty, czy trafiłem na #codenazi?

Tak, powinna to być mania każdego szanującego się programisty. Dajmy na to będziecie robili podsumowanie kosztów zamówienia. Liczycie podatki każdego produktu, rabaty, rabaty zależne do klienta, podatki itp. Później przyjdzie temat zrobienia zamówień przez API. Skopiujesz kod odpowiedzialny za obliczenia, bo tak łatwiej i później wystarczy bardzo niewiele żeby każdy kod zaczął żyć
  • Odpowiedz
@kornfan: Sama duplikacja kodu nie jest grzechem, dopóki za jakiś czas nie będziesz musiał zmienić działania takiego kodu, teraz znajdź (szczególnie w dużym kodzie) wszystkie miejsca, które musisz zmienić...
  • Odpowiedz