Przez ostatnich kilkanaście tygodni nie zaglądałem właściwie do kodu swojego siln… tzn. biblioteki (;P). I chociaż entropia kodu, którym nikt się nie zajmuje, nie powinna w zasadzie rosnąć, od czasu do czasu przydadzą się większe lub mniejsze porządki. Zwłaszcza jeśli w międzyczasie zmieniły się nasze poglądy dotyczące tego, jak programować trzeba, a jak nie należy.
Mniej więcej coś takiego przytrafiło mi się jakiś czas temu. Dość długo byłem zwolennikiem tzw. notacji węgierskiej. Jest to pewna reguła odnosząca się do nazw wprowadzanych do kodu źródłowego – takich jak nazwy zmiennych, klas, funkcji, itd. – która postuluje, aby poprzedzać je pewnymi przedrostkami. Prefiksy te mają dostarczać pewnych informacji, mówiąc na przykład, czy mamy do czynienia z klasą, strukturą czy ze zmienną. W tym ostatnim przypadku dodatkowo rozróżniamy też zmienne lokalne od pól klas, a także wprowadzamy przedrostki identyfikujące ich typy. Produktem tych zasad mogą być ostatecznie nazwy typu CFoo::m_pstrVar
.
Prawdopodobnie cała ta zabawa była przydatna wtedy, gdy nie dysponowało się zintegrowanymi środowiskami programistycznymi (IDE). Teraz nietrudno jest poznać typ zmiennej: wystarczy najechać kursorem na dowolną nazwę w kodzie, a w podpowiedzi dostaniemy jego deklarację. Proste i praktyczne.
Podejrzewam, że nadmierna sympatia do notacji węgierskiej wzięła się u mnie stąd, że stykałem się z nią dawno temu w kodach napisanych w C i C++, z których – nie ukrywajmy – niewiele wtedy rozumiałem :) Tym więc mogę usprawiedliwić fakt, że bezmyślnie przejąłem ten poroniony w gruncie rzeczy sposób nazewnictwa. Na szczęście nigdy nie jest za późno, aby nawrócić się na właściwą drogę, co też niniejszym czynię ;]
Wyrzucenie wszystkich prefiksów chociażby z nazw zmiennych byłoby sporym zadaniem, zwłaszcza że mówimy o kodzie liczącym przecież 30 tysięcy linii (co jest, przy okazji, bardzo dziwne, jeśli się weźmie pod uwagę jego mizerię funkcjonalną :)). Dlatego rozpoczynam skromnie: od poprawienia nazw wszystkich klas i struktur tak, aby nie były opatrzone żadnymi “ozdobnikami”. Nie ukrywam, że w ten sposób staram się upodobnić do konwencji stosowanej w .NET i JVM. Bo przecież dobre wzorce są po to, aby je naśladować…
Hej,
Dobrze robić porządki i czasem zmieniać swoje upodobania, jednak chciałem przy okazji napisać, że od jakiegoś czasu na Twoim blogu jakiś skrypt mi się ciągle blokuje (chwilowo wiesza przeglądarkę FF, po czym ona sama interweniuje, aby ten skrypt przerwać). Nie wiem czy inni też mają tego typu problem z Twoją stroną.
pozdrawiam
Ja tam żadnych problemów nie mam korzystając z FF. Osobiście nigdy nie byłem zwolennikiem notacji węgierskiej, po prostu mi nie pasowała i tyle. Może to jakieś moje zboczenie, ale kod wygląda z jej użyciem mniej estetycznie, także cieszę się z Twojej decyzji, szkoda jednak, że nie zdecydowałeś się na to przed napisaniem megatutoriala, no ale ;) Wesołych świąt.
io: Słyszałem, że generalnie ludzie mają z FF 2.0.12 dziwne problemy w niektórych kombinacjach komputer-strona. Nie bardzo wiadomo, od czego to zależy. Np. w tym topiku prezentowany jest podobny problem ze stroną gamedev.pl. Miejmy nadzieję, że poprawią to wkrótce albo chociaż w FF3…
Zaprawdę powiadam Ci Xion iż dobrze czynisz…
Mi się pod względem nazewnictwa najbardziej oczywiście podoba Java ;)
W .NET denerwuje mnie INazwaInterfejsu.
Ja nigdy nie używałem notacji węgierskiej. Jedynym wyjątkiem jaki czynie to interfejsy(czysto wirtualne klasy w C++), które poprzedzam literką I. i nic więcej. No chyba, że pisze w PHP, który jak wiadomo nie ma kontroli typów, to dopisuje przedrostki do zmiennych określające typ. Notacja węgierska jest BLE! :P
Notacja wegierska? A fee… zamiast m_ lepiej piac z duzej litery (argumenty i lokalne z malej).
akurat “m” do pól klas jest bardzo wygodne imo. natomiast reszta notacji raczej nie.
“m” wcale nie jest wygodne ;P
Ja używam:
this.zmienna;
this jest wskaźnikiem, więc wskazany jest raczej operator -> ;)
Paź – w c#, i w javie pewnie też, raczej kropka ;p
Crane, tak, wiem, wy, którzy piszecie w Javie macie różne zboczenia :P
this jest długie i brzydko wygląda – trzeba więcej klepać. Ja tam wolę nacisnąć jedno ‘m’ i mieć wylistowane od razu wszystkie pola klasy :P
Mi też FF fixował troche na tej stronie i musiałem sobie poradzić Adblockiem:
http://xion.org.pl/*/*.js*
Tak, notacja węgierska w takim zakresie jest chora, acz ja sam stosuję wersję przedrostków przyjętą w Symbian S60 SDK – czyli iPoleKlasy, aArgumentFunkcji, zmiennaLokalna. Do tego przedrostki pozwalają się zorientować czy klasa alokuje jakąś pamięć, czy jest na stosie/stercie (C – sterta, może alokować na stercie, T – nie alokuje nic więcej, R – handle, M – interfejs).