Widziałem argumenty za i przeciw systemowi węgierskiemu . Od kilku lat pracuję nad starszym projektem, który korzysta z tego systemu, nazywając każdą zmienną, funkcję prefiksem typu zmiennej np. (StrName, intAge, btnSubmit itp.) (Znam oryginalne prefiksy węgierskiej aplikacji według rodzaju zmienna, a nie typ). Chciałbym, aby mój następny projekt całkowicie go porzucił, ale trudniej mi nazwać podobne rzeczy w sposób jednoznaczny, bez uciekania się do nich.
Powiedzmy, że mam formularz internetowy do zbierania adresów e-mail i przechowywania ich w tabeli bazy danych oraz przycisk, który wywołuje funkcję zapisywania adresu do bazy danych.
Jeśli używam notacji w stylu węgierskim, mogę nazwać pole txtEmail
przyciskiem btnEmail
i wartością zawartą w polu tekstowym strEmail
. Mogę wtedy użyć funkcji storeEmail(strEmail)
do przechowywania wiadomości e-mail. Mam tutaj jasną konwencję, jasne jest, czym jest każda zmienna.
Jaka byłaby najlepsza praktyka nazywania tych zmiennych
- bez uciekania się do systemów węgierskich,
- bez powodowania ich zbyt długich lub mylących
- i z jasną konwencją do wykorzystania w całym moim projekcie?
Odpowiedzi:
Twój ostatni punkt jest najważniejszy - cokolwiek potrzebujesz, aby zachować spójność w całym projekcie i ze współpracownikami. Istnieją dwa główne sposoby osiągnięcia spójności i jeśli to możliwe, powinieneś użyć obu. Najpierw użyj narzędzia do sprawdzenia konwencji nazewnictwa podczas kompilacji. W świecie .Net StyleCop byłby dobrym przykładem takiego narzędzia. Drugim sposobem na uzyskanie spójności jest przeglądanie całego kodu, aby wszyscy mogli się rozejrzeć.
Twoje pozostałe dwa punkty wydają się pytać o alternatywę. Nie jestem pewien, czy potrzebujesz alternatywy; chodzi o to, że język węgierski nie jest już popularny, ponieważ był używany do opisywania typu, gdy system typów i narzędzia były nieco, powiedzmy, mniej surowe. To znaczy, jeśli programowałeś w C i przekazywałeś wskaźniki, jedynym sposobem na śledzenie tego typu był węgierski. Teraz, jeśli używasz języka takiego jak C # lub Java, nie będziesz używać wskaźników (lub bardzo rzadko), więc potrzeba jakiegokolwiek węgierskiego zniknie. Ponadto nowoczesne środowiska IDE pozwalają bardzo łatwo zobaczyć typ, najeżdżając kursorem na zmienną lub, w najgorszym wypadku, używając skrótu, aby zobaczyć oryginalną deklarację. Więc nie sądzę, że potrzebujesz jakiejkolwiek notacji, po prostu nazwij zmienną tym, co robi. Jeśli jest to adres e-mail, użyj „e-mail” lub „
źródło
W przypadku formularzy internetowych / formularzy Windows / innych elementów graficznych warto używać Systems Hungarian, ponieważ można mieć bardzo ściśle powiązane elementy sterujące - na przykład pole tekstowe i etykietę, które pasują do siebie; możesz nazwać je
txtEmail
ilblEmail
rozróżnić. Z mojego doświadczenia wynika, że jest to powszechne i faktycznie przydatne.Ale w twoim kodzie takie nazewnictwo jest niepotrzebne. Jeśli masz zmienną typu,
string
która jest używana do przechowywania wiadomości e-mail, po prostu ją nazwijemail
. Jeśli z jakiegoś powodu się zdezorientujesz, większość IDE powinna pozwolić na najechanie na nią myszką i zobaczenie jej typu. (Idealnie, w przypadku OO, może to być atrybut jakiegoś obiektu iuser.Email
jest jeszcze bardziej wyraźny.)Wydaje mi się, że jeśli w kodzie zadeklarowano więcej niż jeden obiekt, który nie jest formantem GUI, który można poprawnie nazwać
email
, coś jest z natury nie tak z twoim projektem.źródło
Co sprawia, że zmienna jest „długa”?
Zamiast
txtEmail
,btnEmail
można użyćUserEmailText
,UserEmailButton
orazAdminEmailText
,AdminEmailButton
Problem polega na tym, że możesz zacząć odczuwać, że zmienna zaczyna być długa:
AdminEmailIsValid
zaczyna graniczyć, jak długo pozwolę, by zmienna była.Ponadto możesz zacząć zauważać, że ponownie używasz zestawu zmiennych i zestawu operacji na tych zmiennych. Do tego jest przeznaczony OOP . Zamiast zestawu zmiennych utwórz obiekt ogólny:
Następnie możesz utworzyć nową zmienną jako klasę i użyć tej samej notacji kropkowej, aby uzyskać dostęp do swoich danych:
Oczywiście jest to ukierunkowane na języki, które wykorzystują paradygmat OOP, ale większość popularnych języków programowania WWW jest obiektowa lub pozwala na kod obiektowy (PHP, Python, C #, C ++, Java, JavaScript, ActionScript itp. ).
źródło
UserEmailText
aAdminEmailText
konkretnie). Zazwyczaj używam typów przyrostków, ponieważ można przejść do klasyUserEmailText
->UserEmail.text
-> wUser.email.text
zależności od tego, ile abstrakcji / funkcjonalności jest konieczne.