Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Notacja węgierska :)
Forum PHP.pl > Inne > Hydepark
envp
Chiciałbym wiedzieć ilu z was używa i co o niej sądzicie smile.gif
My4tic
Dla mnie podstawa. Zawsze używam.
sf
W php się sprawdza znakomicie smile.gif Na prawdę ułatwia informacje co i gdzie trzymamy, zwłaszcza, że w php nie mamy typowania przecież.
mike
Dla ułomnego php notacja węgierska (i inne takie) jest światełkiem w tunelu przejrzystości kodu.
Aczkolwiek ja wolę:
bln - boolean
int - integer
flo - float
str - string
arr - array
obj - object
res - resource
Turgon
Przydatne, ale ja i tak wolę nazywać zmienne zgodnie z przeznaczeniem i to wystarcza biggrin.gif
envp
Tak, ale można przecież używać zgodnie z przeznaczeniem, a notacja nie tylko ułatwia prace początkującemu. tworząc zmienną:

  1. <?php
  2. $aTablica = $oObiekt->getParams();
  3. ?>

wiemy od razu jakiego typu jest, po co grzebać w klasach i szukać co getParams() zwraca ;]

A co do notacji to skrócona chyba lepsza co ? smile.gif
  1. <?php
  2. $aArray,
  3. $iInt,
  4. $sString,
  5. $bBool,
  6. $oObject,
  7. $rHandle
  8. ?>


No i co myślicie o wielbłądzię ?

  1. <?php
  2. public function getDataArrayedForSomething
  3. ?>


Ps. Ja już sie przyzwyczaiłem i za cholere nie zmienie stylu pisania smile.gif
mike
Ja tam jestem zwolennikiem kodowania wg. Code Conventions for the Java Programming Language.
To jest moim zdaniem jedyny właściwy standard.
I właśnie, to jest standard, jeśli chcesz pisać w Java, piszesz wg. Conventions i kropka.
W php standardu nie ma, jest za to śmietnik.

Dlatego wszystko co zbliża mnie w php do Java Conventions jest lepsze od wszystkiego poprzedniego.
sf
@envp: piszę tak jak Ty właśnie podałeś, dla mnie jest to optymalny sposób pisania smile.gif)

W php też jest pewna propozycja pear jak powinno się pisać:

http://pear.php.net/manual/en/standards.php
ikioloak
Wg mnie okreslanie typow zmiennych poprzez ich nazwy w jezyku typowanym dynamicznie jest conajmniej dziwne. Po to jest typowany dynamicznie zeby zmienna nie miala narzuconego typu. Jak rozwiazujecie sytuacje gdy nie znacie typu zmiennej? Ulomnoscia php jest niemoznosc przeciazania funkcji. Wiec w przykladzie
  1. <?php
  2. function foo($param)
  3. {
  4. if (is_array($param)) { 
  5. ...
  6. } elseif (is_numeric($param)) {
  7. ...
  8. }
  9. }
  10. ?>

Jak wg notacji wegierskiej powinna byc oznaczona $param? Jako mixed?

Co do konwencji kodowania, nie ma ustalonej odgornej, ale jest ich kilka. PEARowa i ZF sa bardzo zblizone do Java Code Conventions.

Cytat
I właśnie, to jest standard, jeśli chcesz pisać w Java, piszesz wg. Conventions i kropka. W php standardu nie ma, jest za to śmietnik.

Bez przesady. Nie chcesz pisac wedlug konwencji Javowych to tez nie piszesz. I to samo w php.

edit: poprawki gramatyczne bo sam nie moglem jednego zdania zrozumiec po przeczytaniu winksmiley.jpg
dr_bonzo
Cytat
Jak wg notacji wegierskiej powinna byc oznaczona $param? Jako mixed?

Tak, a potem mozesz zmienic jej nazwe:

if ( is_array( $params ) )
{
$aParams = $params;
}

itp
sf
Cytat(ikioloak @ 9.01.2007, 12:18:10 ) *
Wg mnie okreslanie typow zmiennych poprzez ich nazwy w jezyku typowanym dynamicznie jest conajmniej dziwne.


Jeśli coś ułatwia pracę to dlaczego tego nie stosować? Osobiście w ogóle nie wsadzam do jednej zmiennej np. stringu, a potem tablicy czy obiektu. Mogę, ale wydaje mi się to niewłaściwe z punktu przejrzystości kodu.. raz w zmiennej była tablica, potem jest obiekt.. e sorry, mnie to nie bawi. Wolę mieć porządek, a ten porządek pomaga mi zachować notacja węgierska.

Mixed używam gdy nie wiem jakiego typu będzie dana zmienna.. czasem się zdarza winksmiley.jpg
tes
Cytat(envp @ 9.01.2007, 11:08:54 ) *
No i co myślicie o wielbłądzię ?
(...)
Ps. Ja już sie przyzwyczaiłem i za cholere nie zmienie stylu pisania smile.gif


Mam dokładnie to samo... Wielbłąd ponad wszystko smile.gif
W php i takza wiele nie piszę, a w innych językach IDE podpowiada zwracany typ ;]
Cysiaczek
Obecnie nie musisz sprawdzać typu zmennej jeśli jest ona obiektem, lub tablicą
  1. <?php
  2. function foo(array $param){}
  3. ?>


Notacja węgierska faktycznie może pomóc w czytaniu kodu, ale nazewnictwo zmiennych wydaje mi się przesadą (choć nie zawsze), zwłaszcza w kodzie obiektowym, mocno "zinterfejsowanym". Rozważmy taki przykład.

  1. <?php
  2. class A{
  3.  
  4. /**
  5.  * @var integer
  6.  */
  7. private $MyProperty;
  8.  
  9. /**
  10.  * Ustawia A::$MyProperty
  11.  * @param integer
  12.  */
  13. public function setMyProperty($value){
  14.  
  15. if (is_int($value)){
  16. $this->MyProperty=$value;
  17. }
  18. else {
  19. throw new BadVarTypeException($value, gettype($value));
  20. }
  21. }
  22.  
  23. public function getMyProperty(){
  24.  
  25. if (isset($this->MyProperty)){
  26. return $this->MyProperty;
  27. }
  28. else{
  29. return false; // albo coś innego - np, wyjatek, lub null
  30. }
  31. }
  32.  
  33. public function testClass(){
  34. $this->setMyProperty(2);
  35. print $this->getMyProperty();
  36. }
  37.  
  38. }
  39.  
  40. $obj=new A();
  41. $obj->testClass();
  42. ?>

Nazwy zmiennej praktycznie się nie używa. Klasa udostępnia za to settery i gettery do tej właściwości. Od tego momentu nie musisz znać nazwy zmiennej - używasz interfejsu, do którego musisz przeczytać dokumentację. Zauważcie, że metody są publiczne, a więc przeznaczone dla otoczenia obiektu, ale sama klasa również korzysta ze zdefiniowanego przez siebie interfejsu
W tym przypadku oznaczanie A::$MyProperty przedrostkiem i lub int byłoby masłem maślanym, bo tylko dwie metody bezpośrednio operują na tej zmiennej. Dla programisty jest ważne, że musi przekazać zmienną typu integer jako argument metody setMyProperty(). Nie musi sprawdzać tez typu zwracanego przez getMyProperty(), bo jest on wymuszony przez wspomniany setter.
Owszem. Nie zawsze tworzy się tak rozbudowane interfejsy dostępu do zmiennych, ale chciałem pokazać, że w kodzie obiektowym można (często się nawet zaleca) inaczej.

Wydaje mi się, że ta notacja jest w php niezbędna w kodzie strukturalnym oraz w mocno skomplikowanych algorytmach (30-40 linijek kodu?). Po prostu ułatwia zrozumienie.

Na koniec cytat z Wikipedia.org
Cytat
Notacja węgierska, przez wielu wręcz uwielbiana, u innych wywołuje mieszane uczucia. Główną wadą tego systemu jest zmiana typu zmiennej. Jeśli chce się zmienić typ, trzeba poprawiać nazwę w każdym miejscu programu. W związku z tym notacja nie jest najlepszym rozwiązaniem dla programistów nieco roztargnionych.


Pozdrawiam.
nrm
dla mnie to robienie z kodu śmietnika, zamiast przejrzystego kodu otrzymujemy jakieś szlaczki. tutaj przychylam sie do glosu mike_mecha.
ikioloak
Co tak poza tym daje wiadomosc ze zmienna jest obiektem jak i tak nie wiemy jakiej klasy. Znow jak okreslic tablice obiektow zeby oddac jej charkter.
Lepszym rozwiazaniem niz konwencja wegierska wydaje mi sie robienie stosownych komentarzy phpDoc'a.
envp
Cytat
dla mnie to robienie z kodu śmietnika, zamiast przejrzystego kodu otrzymujemy jakieś szlaczki. tutaj przychylam sie do glosu mike_mecha.


No bez przesady, kod 'po węgiersku' wydaje się być bardzo czytelny a przedrostki "_" przed nazwą zmiennej pokazują w łatwy sposób czy to prywatna zmienna czy stała. No, ale z tego robi się troszeczkę flame, bo to kwestia gustu. Mimo to uważam, że to jest najlepszy do tej pory sposób pisania a czemu ? Powtarzanie w kółko tego samego że zaczynamy od typu zmiennej z małej litery, wielbłąd, oraz przedrostki typu "_" pozwalają naprawdę w łatwy sposób kod już czytać bo, trzymając się tego kruczowo (po kilku tysiącach linii kodu) widzimy to co chemy bo zawsze to znajduje się tam gdzie powinno smile.gif
NuLL
Powiem krotko - nie znosze n.wegierskiej i nie korzystam. Notacja wegierska jest dla tych co nie potrafia sie polapac we wlasnym kodzie.

Notacje wielbladzia to jest to :-)

Podkresliniki na poczatku byly dla PHP4 - kazde porzadne srodowisko dla PHP5 rozroznia protected itp tak wiec nie ma potrzeby.

A najgorsze to jest to : Zend_Controller_Costam_Jeszczecosinnego winksmiley.jpg
DeyV
A ja jestem wielkim zwolennikiem notacji węgierskiej w połączeniu z CamellCase.

Dlaczego? Nie zawsze przeglądam kod php w środowisku programistycznym. Czasem konieczne jest praca w jakimś prostszym edytorze. Wtedy typowanie zmiennych po ich nazwach okazuje się więcej niż przydatne.

Wstępnie korzystałem z wersji 3-znakowej, tak jak mike_mech - ostatecznie stwierdziliśmy jednak, że jest to bezcelowe marnowanie dodatkowych 2 znaków, w sytuacji, gdy i tak nic więcej to nie wnosi. Dlatego został tylko jeden smile.gif

Argument o tym, że w przypadku zmiany typu zmiennej konieczna jest poprawka wielu jej wywołań jest CO NAJMNIEJ bzdurny. Przecież oczywiste jest, że jeśli coś, co było tekstem, stało się int, to służy do czegoś innego, będą na tej zmiennej wykonywane inne operacje i zmienna służyć będzie po prostu do czegoś innego. Tak więc kod i tak i tak trzeba będzie modyfikować. Taki los roztargnionych...

A co z zmiennymi o nie określonym typie? Ja używam przedrostka m (mixed) i wtedy wiem dokładnie, że w tym przypadku konieczna jest zwiększona ostrożność w pracy z nią.

A w przypadku obiektów, zgodnie z dłuższą rozmową, którą kiedyś prowadziliśmy w naszym php.pl'owym gronie, nazywam z dużych liter, bez żadnych dodatkowych przedrostków.
Jest to jedyne odstępstwo od notacji Javy, na które zdecydowaliśmy się by wyraźnie zaznaczyć obiektowość niektórych atrybutów.

(acha - w większości notacji denerwuje mnie jeszcze jedna rzecz - umiejscowienie spacji w strukturach kontrolnych. Nie wiem do końca dlaczego, ale nie znoszę zapisu if ($cos>0){ i za o wiele czytelniejszy uznaję if( cos>0 ){ - ale to już chyba moje prywatne zboczenie winksmiley.jpg )
hwao
Podpisuje się pod opinią DeyV.

Praktycznie idealnie tak pracuje jak Deyv i jestem bardzo zadowolony z tego sposobu. Stosowałem wiele innych , lecz w końcu okazała się że zbiór tych zasad jest najlepszy.
intol
Polecam ten artykuł: http://www.joelonsoftware.com/articles/Wrong.html .
cadavre
Nie używam węgierskiej choć kiedyś prowadziłem się z takim zamiarem. Przy dobrze napisanej strukturze klasy/metody etc. da się połapać co jest czym. Fakt czasami da się zamieszać, ale przy przeważającym pisaniu w IDE - jest automatyczne podpowiadanie.
Turgon
Zgadzam sie z NuLLem wielbłądzia Rulezz
A rzadko kiedy piszę w IDE chyba, że Kate jest za nie uznawane.
nasty
Ja tez uwazam ze notacja węgierska jest jakas pomylka, rodzaj zmiennej mozna poznac po jej nazwie np. $TimeStamp wiadomo ze int, $IsAdmin wiadomo ze bool i niema co sie bawic w "pro".
sztosz
@intol: Świetny artykuł naprawdę smile.gif A to całe Apps Hungarian to świetna rzecz i aż żal że to się zamieniło w Systems Hungarian sad.gif
MrMag
w swojej aplikacji to jeszcze, ale jak trzeba cos zrobic w czyims kodzie? to ja juz wole miec te 1 literke wiecej i wiedziec co sie dzieje bez wiekszego myslenia smile.gif
Jarod
Ja też używam notacji węgierskiej ponieważ jest mi z tym wygodniej i kod jest bardziej przejrzysty. Jak ktoś nie chce to nie musi używać. A hardcorowcy mogą pisać wszystko w jednej linijce winksmiley.jpg

Przed nazwami prywatnych właściwości dodaję "_". Czy oznaczacie jakoś specjalnie właściwości chronione czy tylko prywatne?
Turgon
A po co je oznaczać biggrin.gif? Ja wszystkie właściwości klasy daje prywatne biggrin.gif I dostęp tylko poprzez metody dostępowe, więc po co zabawa ?
hwao
Cytat(Turgon @ 11.01.2007, 10:28:14 ) *
A po co je oznaczać biggrin.gif? Ja wszystkie właściwości klasy daje prywatne biggrin.gif I dostęp tylko poprzez metody dostępowe, więc po co zabawa ?

prywatne i chronione
Jarod
Cytat(Turgon @ 11.01.2007, 10:28:14 ) *
A po co je oznaczać biggrin.gif? Ja wszystkie właściwości klasy daje prywatne biggrin.gif I dostęp tylko poprzez metody dostępowe, więc po co zabawa ?


Ja stosuje też publiczne więc się pytam..
Cysiaczek
@J4r0d - Podkreślenie jak już wspomniał Turgon było potrzebne w php 4, bo nie było zmiennych oraz metod chronionych i prywatnych. Służyło to informowaniu programisty, że nie powinien dotykać tej zmiennej w innym kontekście niż kontekst klasy, bądź być bardzo ostrożnym w takim operowaniu. Faktem jest jednak, że zdobyło to popularność i jest do dzisiaj stosowane. Ja przestałem w momencie pisania pierwszej klasy w php 5. Zanim oznaczysz coś jako publiczne powinieneś 5x się zastanowić : )

Pozdrawiam.
nrm
z węgierską jest jak z Symfony: używać się tego nie da a mimo to ma wielu zwolenników biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.