Nazwy zmiennych

Czyli jak poprawnie nazywać zmienne?
Nazwy zmiennych

Nazwę zmiennej powinno się wybierać tak starannie jak imię dla dziecka

Dobrze napisany kod powinno czytać się jak książkę, powiem więcej dobrze napisany kod nie wymaga komentowania. Ewentualnie tak jak w książce mamy przypisy tak powinno się komentować nasz kod, bardzo rzadko. Trzymając się tej analogi nasze zmienne powinny być jak nagłówki w tej książce. Po przeczytaniu takiego nagłówka nawet specjalnie nie musimy zagłębiać się w jego treść. Podobnie z nazwami zmiennych, po zobaczeniu zmiennej getNumberOfProducts, zaraz w naszej głowie pojawia się wizja metody lub funkcji która zwróci nam ilość produktów, najprawdopodobniej kontekstu w którym się znajdujemy. Z kolei kiedy nasza zmienna wygląda następująco getProducts i robi to samo, wprowadza w błąd programistę, gdyż każdy spodziewałby się tablicy produktów. Od zawsze powtarzam że kodowaniu najważniejsza jest dokładność! Poniżej postaram Ci się przybliżyć kilka zasad którymi powinieneś się kierować podczas poprawnego doboru nazw dla Twoich zmiennych.

Dobrze określ swoje intencje

O co Ci tak naprawdę chodzi? Po co Ci ta zmienna? Dlaczego istnieje? Co robi? Jak się jej używa?

Źle
const deleteDays; //dni od usunięcia

Dobrze
const daysSinceDelete; //dni od usunięcia

Zmienna deleteDays nie mówi nam jasno o jakie dni chodzi, pozostawia pole do błędnej interpretacji oraz źle odzwierciedla intencje. Dodatkowo jeżeli użyjemy zmiennej daysSinceDelete musi ona przechowywać wartość w dniach a nie sekundach, gdyż będzie to nieadekwatne do nazwy zmiennej.

Informuj poprawnie

Jak już używasz skrótów, upewnij się że ten skrót jest powszechny i każdy programista poprawnie go odczyta.

Źle
const sliderImagesTab; //tablica zdjęć slidera

Dobrze
const sliderImagesArr; //tablica zdjęć slidera

sliderImagesTab używa niepoprawnego skrótu określającego tablicę w językach programowania. Oczywiście końcówka Arr mogłaby zostać pominięta, gdyż samo sliderImages powinno odnosić się do tablicy. Napiszę więcej, jeżeli kontekst nam na to pozwala moglibyśmy użyć samej nazwy images.

Nie twórz nazw zmiennych które nie odróżniają się znacząco, jeżeli jednak bardzo tego potrzebujesz i jesteś pewien że nie ma lepszej metody, różnicę umieść na końcu nazwy

Źle
const getAttributeNameFromActiveImage; //Atrybut name aktywnego zdjęcia
const getAttributeAltFromActiveImage; //Atrybut alt aktywnego zdjęcia

Lepiej
const getFromActiveImageAttributeName; //Atrybut name aktywnego zdjęcia
const getFromActiveImageAttributeAlt; //Atrybut alt aktywnego zdjęcia

Dobrze
const activeImage.getAttributeName; //Atrybut name aktywnego zdjęcia
const activeImage.getAttributeAlt; //Atrybut alt aktywnego zdjęcia

Oczywiście zmienne te są funkcjami, a sama ich nazwa nie jest zadowalająca. Została użyta, aby zobrazować jak możemy zaburzyć sobie czytelność kodu przez użycie zmiennych zbyt podobnych do siebie wizualnie.

Strzeż się zakazanych słów

Unikaj nazywania zmiennych częściami semantycznymi. Niektóre słowa zarezerwowane są dla poszczególnych bytów programistycznych, przykładowo słowo class nie oznacza grupy czy kategorii. Tyczy się konkretnego elementu programowania.

Źle
const humanClass; //Klasa społeczna człowieka

Dobrze
const humanSocialStatus; //Klasa społeczna człowieka

Podobnie jest ze słowami typu function, array, string itp. Możesz wprowadzić przez nie w błąd programistę który założy że chodzi Ci o zupełnie inny kontekst nazwy. Dodatkowo pamiętaj że niektóre języki mają swoje zasady nazewnictwa, przykładowo w JS klasy nazywamy stosując pierwszą literę wielką, co z kolei powoduje że nie ma potrzeby nazywania zmiennej ProductClass wystarczy Product

Zmienne lubią dobrze wyglądać

Do czytania kodu używasz między innymi wzroku, a wzrok może płatać figle. Słynny już przykład z l małą literą L oraz liczbą jeden 1. Oraz wielką literą O oraz zerem.

Źle
const lO; //Zmienna składająca się ze znaków L i O

Dodatkowo nie mieszaj przyjętej konwencji nazewnictwa zmiennych:

Źle
const get_FirstLetter; //Pobierz pierwszą literę

Dobrze
const getFirstLetter; //Pobierz pierwszą literę

Wielu doświadczonych programistów złości system nazewnictwa w BEM CSS. Mianowicie chodzi o stosowanie znaków "--" oraz "__", moim zdaniem wynika to z potrzeby pedantycznego utrzymania kodu, wcięć, odstępów, skracania ect. To taki mój anegdotyczny dowód na to że zmienna lubi dobrze wyglądać.

Kontekst nazwy zmiennej musi się różnić

Nazwa zmiennej nie może zostać pomylona z inną podobną nazwą.

Źle
const getImages;
const getImage;
const getPictures;

Dobrze
const getSliderImages;
const getActiveImageOfSlider;
const getThumbnails; 

Pierwsze trzy zmienne mogą wskazywać na dokładnie taką samą funkcje, jeżeli stworzyłeś już zmienną i musisz przebudować cały program gdyż potrzebujesz podobnej nazwy, zrób to!

Nazwy muszą być łatwe

Używaj nazw zmiennych które można omawiać na spotkaniach, pamiętaj że Twoja zmienna ma być skondensowanym opisem swojej zawartości. Co opisuje zmienna a110222product, już Ci tłumaczę jest to produkt utworzony dnia jedenastego lutego. Spróbuj jednak rozmawiać z jakimś programistą o tak napisanym kodzie.

Źle
const a110222product; //Produkt z zaszytą datą w nazwie

Dobrze
const product.createDate; //Produkt z datą podaną jako właściwość

Zmienną będziesz wyszukiwał kilkanaście razy

Dobra nazwa powinna być unikalna i łatwa do wyszukania. Pomyśl że zmienną nazwałeś jedną literą, przykładowo a pomyśl ile czasu zajmie Ci odszukanie tej zmiennej w kodzie który liczy sobie 1000 linijek

Źle
const pro; //Zmienna przechowująca lokalnie obiekt produktu

Dobrze
const product //Zmienna przechowująca lokalnie obiekt produktu

Wyjątkiem są zmienne których nigdy nie będziesz wyszukiwał, tak jak przykładowo i w pętli for.

Nie bój się długości

Nazwa zmiennej powinna być wyczerpana i zrozumiała, nie oszczędzaj na słowach oszczędzaj na lepszej nazwie.

Źle
const galleryThumbnailsShowOrHideButton; //Nazwa za długa, można prościej

Dobrze
const galleryThumbnailsToggleButton; //Długa i fajna

Kod z odpowiednimi nazwami jest dłuższy, ale też i lepszy.

Niepotrzebne przedrostki i przyrostki

Wszystkie niepotrzebne dodatki do zmiennych w stylu "info", "var", "private", "class" ect.

Źle
const varProductInfo; //Nie ma potrzeby informowana że to zmienna, i jaką informacje daje nam słowo info?

Dobrze
const product; //Ta nazwa mówi nam dokładnie tyle samo co powyższa

Skromność

Każdy programista rozumie że jest Bogiem świata, że powinien być to elitarny zawód pozbawiony sezonowych wordpresowców, jednak nie kombinuj. Nie pokazuj na siłę jakim kozakiem jesteś, jeżeli w nazwie pętli przyjęło się i nie zamieniaj tego na index. Raz to już tradycja, dwa co jak będziesz potrzebował pętli w pętli? A no tak zawsze można nazwać jndex.

Klasy

Nazwy klas, powinny być rzeczownikami lub połączeniem rzeczownika i rzeczownika oraz rzeczownika i przymiotnika.

Dobrze
const Tree; //Rzeczownik
const BigTree; //Przymiotnik + rzeczownik
const TreeOak; //Rzeczownik + rzeczownik 

Metody

Nazwy metod powinny być czasownikiem połączonym z rzeczownikiem lub z rzeczownikiem i przymiotnikiem. Mutatory i predykaty powinny mieć nazwy na podstawie właściwości którą obsługują i być poprzedzone przedrostkiem get, set lub is.

Dobrze
const getTreeHeight; //Czasownik + rzeczownik + rzeczownik
const setBigTree; //Czasownik + przymiotnik + rzeczownik
const delete; //Czasownik 

Trzymaj się nomenklatury

Zawsze opisuj abstrakcje, klasę czy obiekt w którym się znajdujesz tym samym słowem. Przykładowo kiedy tworzysz slider nie nazywaj go raz sliderem a raz rotatorem. Można się łatwo pogubić kiedy w kodzie mamy dwie metody getImages lub getPictures. Czym one się różnią?

Musimy trzymać się razem

Ziomek który czyta Twój kod to też programista, pomóż mu i użyj nazwy związanej z naszą branżą przykładowo buttonFactory i już wiadomo że został użyty wzorzec fabryki, można sprawdzać czy słusznie czy naciąganie.

Podsumowanie

Udało mi się zgromadzić tych klika prostych zasad, najprawdopodobniej będę dodawał nowe, wrzucając mój artykuł na pastwę złośliwych programistów. A Ty jakie masz zasady których się trzymasz podczas nazywania zmiennych?