DRY to akronim od angielskiego zwrotu "Don't Repeat Yourself" czyli: nie powtarzaj się. Jest to złota zasada polegająca na unikaniu powielania kodu, który się powtarza. To znaczy, że jeżeli np. w jednym miejscu programu dysponujemy kodem, który oblicza np, prędkość poruszającego się pocisku, to kategorycznie nie możemy powtórzyć tego kodu w innym miejscu. Jeżeli znajdziemy zastosowanie takiego fragmentu gdzieś indziej, musimy wyodrębnić ten kod, zamknąć go np. w funkcji i używać jej w miejscach, gdzie jest to potrzebne.

Niby proste i trywialne, jednak debiutanci mają z tym problem. Oczywiście łatwiej jest skopiować fragment programu i wkleić go w miejsce, gdzie jest potrzebne niż enkapsulować kod do funkcji i zmieniać istniejący już kod. Za pomysły, że tak będzie łatwej, należy się kara chłosty, ponieważ to zawsze wróci! Prędzej czy później dojdzie do sytuacji, w której kod, który nas interesował trzeba "lekko zmodyfikować". Ryzyko pominięcia innego miejsca, gdzie znajduje się ten sam kod jest bardzo duże i już samo to, że zmiana jednego logicznego fragmentu wymaga zmian w kilku miejscach w programie jest naprawdę fatalnym pomysłem.

Kod powinien być napisany w taki sposób (atomowy, luźno powiązany), że zmiana jakiejkolwiek funkcjonalności, nie wiąże się ze zmianami kodu w innych częściach programu. Jeżeli mamy błędnie napisaną funkcję do wyświetlania kotków na ekranie to poprawić ją należy w jednym miejscu i to MUSI zamknąć temat.

Czasami zdarzy się, że zmiana funkcji, którą wyodrębniliśmy będzie wymagać zmian w innych miejscach. Np. gdy zmieni się sposób wywoływania funkcji, dojdzie dodatkowy jej parametr, ale to tylko zmiana wywołania a nie grzebanie w bebechach algorytmu.

Osobiście, podczas przeglądu kodu (tzw. Code review), gdy widzę powielający się kod, po prostu odrzucam zadanie. Wam polecam to samo- zero tolerancji na powtarzający się kod. Należy wystrzegać się pokus typu "przecież to tylko mały kod, na pewno nie będzie zmieniany, a wyodrębnienie zajmie sporo czasu". Złe uczynki zawsze wracają ze zdwojoną siłą. Cytując Uncle "Bob" Martina:

The only way to go fast is to go well

Masz w notatniku jakieś smaczki, które znalazłeś z powielaniem się kodu? Jaki masz stosunek do jednej linijki kodu, która wykonuje kilka instrukcji, a musisz ją użyć w kilku miejscach? Kopiujesz czy wyodrębniasz? Czym się kierujesz przy wyborze?

Dobry kontent!

Piotr Poźniak

Piotr Poźniak

Programuję od ponad 15 lat. Prowadzę software house. Angażuję i zachęcam wszystkich do programowania w ramach inicjatywy Programowanie jest łatwe.

Bądź pierwszy, podziel się swoją opinią!