Każda klasa, funkcja czy zmienna w naszym kodzie źródłowym ma swoją nazwę. Dobór odpowiednich nazw dla wszystkich tych elementów ma fundamentalne znaczenie dla jakości powstającego kodu. Bardzo często w pośpiechu nadajemy nazwy przypadkowe, które nic nie znaczą. Posługujemy się skrótami myślowymi lub akronimami. Dwa miesiące później, z trudem analizujemy swój własny kod próbując odgadnąć co robi ta funkcja i do czego służy tamta zmienna. Nazwy mają ogromne znaczenie więc czas poświęcony na ich odpowiednie dobranie to bardzo dobra inwestycja.
Na co więc zwrócić szczególną uwagę? Jak konstrułować poprawne nazwy róznych elementów naszego kodu żródłowego? Istnieje kilka prostych zasad, które nam w tym pomogą.
Używaj nazw, które coś znaczą – nazw opisowych
Pamiętaj o tym, że nasz kod nie jest przeznaczony tylko dla kompilatora czy interpretera. Bardzo często, czytają go także ludzie więc nazwy użyte w kodzie, powinny jasno informować jaki jest cel, co robi oraz jak jest używany utworzony przez nas element kodu źródłowego. Nazwa powinna być na tyle opisowa, aby nie wymagała żadnego, dodatkowego komentarza. Jeśli utworzymy zmienną :
int s; //pozostały czas w sekundach
jesteśmy zmuszeni dodać komentarz do kodu. Najlepiej jeszcze, powtórzyć ten komentarz w każdym miejscu, w którym użyjemy zmiennej s. Zamiast tego, możemy zadeklarować zmienną o innej nazwie, np :
int remainingTimeInSeconds;
czyli użyć nazwy, która coś znaczy, nazwy opisowej, co w sposób szczególny przyczyni się do poprawy czytelności tworzonego przez nas kodu.
Powinniśmy oczywiście dążyć do tego, aby nazwy były możliwie jak najkrótsze, ale (poza uzasadnionymi przypadkami) nie róby tego kosztem czytelności.
Nie używaj nazw, które mogą wprowadzić w błąd
Od braku informacji gorsze jest tylko jedno, dezinformacja. Jeśli użyjemy nazwy, która nic nie znaczy, osoba analizująca nasz kod straci mnóswto czasu ustalając co przechowuje zmienna lub co robi funkcja. Jeśli natomiast nazwa będzie coś znaczyć i to znaczenie okaże się fałszywą wskazówką, straci tego czasu dwa razy więcej. Fałszywe wskazówki pojawiają się w naszym kodzie przede wszystkim z dwóch powodów :
- nazwa coś znaczy, ale jest źle dobrana przez autora kodu,
- nazwa coś znaczy, była prawidłowo dobrana przez autora kodu, jednak po niedbałej modyfikacji przez innego programistę, nazwa pozostała a cel, funkcjonalność lub sposób użycia się zmienił.
Dla przykładu, uznano, że nie podajemy już pozostałego czasu w sekundach (nasza zmienna int remainingTimeInSeconds) tylko w minutach więc zmieniono wartość przechowywaną w tej zmiennej ale nazwę pozostawiono.
Używaj nazw odległych znaczeniowio
Czasem w naszym kodzie źródłowym pojawiają się nazwy elemetów tego samego typu, bardzo zbliżone znaczeniowo. Powiedzmy, że mamy klasę Student. Wszystko jest w należytym porządku, dopóki w kodzie nie pojawi się druga klasa, tym razem o nazwie StudentInfo, StudentData czy StudentObject. Której klasy należy teraz użyć, aby dotrzeć do historii wpłat czesnego dla danego studenta?
Starajmy się dbać o to, aby nie tworzyć takich dylematów. Aby nasze nazewnictwo nie tylko coś znaczyło, ale było również jednoznaczne. Inne przykłady, tym razem z nazwami funkcji (metod) :
getActiveStudent
getActiveStudents
getActiveStudentAccount
Takie historie pojawiają się w kodzie dość często i są rozumiane wyłączenie przez swoich autorów – z tym, że przez pierwsze dwa miesiące po ich stworzeniu.
Używaj rzeczowników jako nazw klas
Nazwa klasy powinna być rzeczownikiem lub wyrażeniem rzeczownikowym. Poprawne nazwy klas to np. :
Student
Address
LogParser
Używaj czasowników jako nazw funkcji
Nazwy funkcji (metod), powinny być czasownikami lub wyrażeniami czasownikowymi. Dla przykładu możemy podać :
delete
getName
setName
deleteLogs
Używaj jednego określenia dla podobnych operacji
Należy używać tego samego określenia dla wszystkich podobnych operacji. Np. nazwy metod do pobierania różnych wartości z obiektu powinny być skonstrułowane z użyciem tego samego przedrostka. Jeśli się zdecydujemy na get, czyli np. getName, to do konstrułowania nazw dla innych metod pobierających wartości z obiektu powinniśmy konsekwentnie używać przedrostka get a nie np. fetch, retrive czy list.
Wprowadź normy i używaj metryk jakościowych
Dobrą praktyką jest wprowadzenie do firmy norm odnośnie tworzenia nazw elementów kodu źródłowego. Takie rozwiązanie funkcjonuje w wielu firmach tworzących oprogramowanie i efekty tego są bardzo widoczne.
Dodatkowym orężem w walce ze złym nazewnictwem są metryki jakościowe kodu. Wdrożenie w firmie narzędzia do generowania takich metryk, np. CheckStyle oraz uzbrojenie go w zestaw odpowienich wyrażeń regularnych pomoże nam na bieżąco kontrolować zgodność tworzonego kodu z większością wprowadzonych w firmie norm dot. nazw elementów kodu źródłowego.
Dzisiejsze środowiska programistyczne np. Eclipse czy NetBeans dają nam narzędzia, dzięki którym operacje takie jak zmiana nazwy, są bardzo proste i bezpieczne. Korzystajmy więc z ich dobrodziejstw. Przyglądajmy się krytycznie nazwom w naszym kodzie źródłowym i zmieniajmy je jeśli trzeba. Stosujmy się przy tym do zbioru powyższych zasad a jakość naszego kodu z pewnością znacznie się poprawi.