DRY (ang. Don’t Repeat Yourself, pol. Nie powtarzaj się) – reguła stosowana podczas wytwarzania oprogramowania, zalecająca unikanie różnego rodzaju powtórzeń wykonywanych przez programistów – na przykład unikanie tych samych czynności podczas kompilowania, unikanie wklejania (lub pisania) tych samych (lub bardzo podobnych) fragmentów kodu w wielu miejscach. Reguła pozwala na wykonywanie powtarzających się czynności jeżeli jest ona zautomatyzowana – wykonywana przez komputer. W przypadku powtarzającego się kodu źródłowego można separować powtarzający się fragment i jedynie odwoływać się do niego.

Regułę tę sformułowali Andy Hunt oraz Dave Thomas w książce Pragmatyczny programista[1]. Autorzy zaznaczyli, że nie chodzi tylko o unikanie powtórzeń w kodzie, ale o unikanie wszelkich powtórzeń czynności robionych przez programistów. Podają przykłady takie jak automatyzacja procesu kompilacji, generowanie kodu, automatyzacja procesu tworzenia dokumentacji, pisanie skryptów automatyzujących pracę[2].

Zalety stosowania edytuj

Główną zaletą stosowania reguły DRY podczas pisania programu jest uniknięcie problemów wynikających z błędów popełnionych w powtarzającym się fragmencie kodu. Wówczas DRY przynosi znaczną oszczędność czasu, bo zmianę trzeba wprowadzić tylko w jednym miejscu, i nerwów związanych z pominięciem któregoś z wystąpień wadliwego kodu. Podobnie zachodzi w przypadku konieczności udoskonalenia takiego powielonego kodu.

Jednocześnie stosowanie DRY wymusza lepsze specyfikowanie funkcjonalności i projektowanie interfejsów w kierunku ich uniwersalności. Na przykład funkcje: wypisująca dane do pliku i wypisująca dane na ekran mają z reguły niemal identyczną postać. Zaprojektowanie wspólnego interfejsu wypisywania danych dla ekranu i pliku (deskryptor konsoli, którego można użyć razem z write() w POSIX, czy strumienie w C++) pozwalają na całkowite współdzielenie kodu.

Sposoby realizowania edytuj

W różnych językach programowania istnieje wiele mechanizmów pomagających realizowanie reguły DRY. Najbardziej powszechnym mechanizmem są funkcje, występujące praktycznie w każdym języku programowania, pozwalające na wydzielenie powtarzającego się kodu i wywoływanie go z dowolnego miejsca w programie.

Podobny efekt można uzyskać poprzez proces automatycznego wklejenia części kodu przed kompilacją, za pomocą makr, w przypadku języka C, lub szablonów, oferowanych przez nowocześniejsze języki programowania. Takie rozwiązanie jest mniej oszczędne, jeśli chodzi o oszczędność pamięci, lecz niekiedy preferowane, na przykład ze względu na przepełnienie stosu. Tego typu rozwiązania są stosowane również do tworzenia wzorców do tworzenia struktur i klas, w zależności od parametrów, na przykład do tworzenia typu dla listy, w zależności od typu danych, które ma przechowywać.

Z podobnych powodów zaleca się używać stałych. Ponadto stałe podnoszą czytelność kodu, poprzez zastąpienie, często niewiele mówiących, liczb na czytelniejsze nazwy stałych. Analogicznie zdarza się postępować z typami danych, na przykład zastępując typ własnym, na wypadek gdyby zaszła potrzeba zmiany na typ mogący przyjmować większe bądź mniejsze wartości.

Kolejnym mechanizmem, typowym dla DRY, są moduły, pozwalające nie tylko podzielić kod na części zajmujące się pojedynczymi funkcjonalnościami, ale też ułatwić przeniesienie części kodu z jednego programu do drugiego. Szczególnym przypadkiem, w którym moduł jest oddzielony od programu są komponenty (np. biblioteki).

Nowocześniejszym sposobem unikania powtórzeń jest typowy dla programowania obiektowego polimorfizm. Pozwala on na współdzielenie kodu przez różne klasy.

Zobacz też edytuj

Przypisy edytuj

Bibliografia edytuj