twitter facebook youtube

Refaktoryzacja? Nie mam na to czasu

2017-10-06

Witaj, dzisiaj krótki ale myślę, że dość istotny temat jakim jest refaktoryzacja kodu (nieco więcej informacji, a także praktyczny przykład refaktoryzacji znajdziesz -> tutaj <-). W wielu firmach panuje podejście, że określona funkcjonalność jest potrzebna na już albo najlepiej na wczoraj. Czy to dobre podejście? Absolutnie nie! Owszem można postawić się w sytuacji klienta, który oczekuje określonej funkcjonalności ale czy naprawdę mamy robić to kosztem czytelności kodu? Po co właściwie refaktoryzacja? Nie mam na to czasu. Może i Ty sam tak mówisz? Przecież można napisać przejrzysty kod od razu bez konieczności refaktoryzacji. Można ale czy w praktyce stosujesz się do tego?

Kiedy refktoryzować?

Wydaje Ci się, że Twój kod jest czytelny? Wiesz co gdzie jest? Super. Ale czy aby na pewno? Spróbuj znaleźć określoną funkcję albo zmienną bez użycia magicznego CTRL+F (lub ctrl+shift+f).
ctrlf
No faktycznie nie zawsze się da. A teraz spójrz jeszcze raz na swój kod, na swoją klasę ile ma linii?? 500? 1000? Czy nie sądzisz, że to zdecydowanie za dużo? Jeśli nie to, to zdecydowanie musisz się przyjrzeć swojemu kodowi jeszcze raz? Owszem możesz stwierdzić:
To mój kod i nic Ci do tego
Jeśli masz takie podejście mogę Ci polecić wystąpienie na gali finałowej “Daj się poznać 2017” mojego kolegi Grzegorz Kotfisa, “Mój kod, moja dzielnica“.
Owszem to Twój kod, ale czy musi być on tak samo zaśmiecony jak niektóre biurka?
messy-desk
W sumie ja wszystko tu znajdę. Możliwe, że tak jest, nie twierdzę, że nie. Ale czy nie lepiej tak?

organised-computer-desk

Ale od czego zacząć?

To jest dobre pytanie, gdy żyje się w bałaganie ciężko nagle coś ruszyć bo się może popsuć.
refactor-wrong
I nagle cały kod nie działa, nagle zrobił nam się jeszcze większy bałagan. Co ja pocznę, jak to cofnąć? Przede wszystkim jeśli jeszcze nie korzystasz, to polecam system kontroli wersji. Osobiście korzystam z GITa i mogę go polecić każdemu. No ale jak z tego korzystać? O gicie będziecie mogli poczytać w moim cyklu artykułów o gicie (pierwszy artykuł za tydzień). Dzięki systemowi kontroli wersji z łatwością będziemy mogli wycofać wprowadzone zmiany.
Refaktoryzację zaczynamy od analizy kodu. Należy zadać sobie pytania:

  • Co jest nadmiarowe?
  • Czy powtarzamy po kilka razy jakąś czynność?
  • Co można odseparować?

Gdy przeanalizowałeś już swój kod należy przystąpić do podsumowania co trzeba wykonać. Spisz sobie wszystkie uwagi w notesie i przystąp do działania. Dodatkowo jeśli masz wątpliwości nie bój się spytać bardziej doświadczonego kolegi czy on widzi jeszcze jakieś możliwości aby uporządkować Twój kod. Nie martw się to nadal będzie Twój kod, jednak będzie on bardziej czytelny.

Klient nie będzie czekał

Szef Ci powie, że trzeba dodać funkcjonalność na już. Siadasz do biurka szybciutko piszesz kod. Kompilujesz, działa, super można zaktualizować. A teraz spójrz na kod. Napisany na szybko? Doklejony do jakieś klasy? Albo nawet do klasy głównej? Ale przecież działa. A jeśli coś działa, a nie wygląda to przecież jest dobre! Teoretycznie tak. Ale wyobraź sobie sytuację, że nie ruszasz tego kodu przez dłuższy czas. Następnie szef prosi Ci o poprawki w kilku funkcjonalnościach. Otwierasz kod i co? Kto to napisał? Jakie to brzydkie i nieczytelne. Ale to przecież Twój kod.
mycode
Znalezienie tego co trzeba zmienić zajmie z pewnością więcej czasu, niż poświęcenie trochę czasu na refaktoryzację. Zrefaktoryzowany “czysty” kod czyta się o wiele przyjemniej i jego edycja jest dużo łatwiejsza niż “doklepywanie” kolejnych linii kodu bez ładu i składu. Klient będzie wolał poczekać i dostać działającą aplikację, niż aplikację z błędami bo kiedyś popełniłeś błąd i nie poprawiłeś go od razu, a teraz się męczysz i tracisz dużo więcej czasu. A miało być tak pięknie.

Teoria teorią …

… a praktyka to co innego. Jak już wspomniałem w przyszłym tygodniu ruszam z cyklem artykułów o gicie ale równolegle ruszy cykl o refaktoryzacji. Będzie to praktyczny przewodnik na przykładzie “spaghetti kodu”, z którym pewnie miałeś albo wciąż masz do czynienia.
Masz pytania?
Masz sugestie do cyklu o refkatoryzacji?
Chcesz coś konkretnie wiedzieć?
Pisz śmiało. Postaram się sprostać Twoim oczekiwaniom.