PHP vs Python, czyli co mi się podoba a co nie
Ten post został zainspirowany dyskusją z forum języki skryptowe na golden-line. Jako, że poszedł tam dość duży flejm i jak zwykle ludzie zaczęli sobie skakać do gardeł (właściwie nie wiadomo po co) postanowiłem niejako podsumować toczącą się tam dyskusje kilkoma własnymi przemyśleniami.
Chciałem się skupić w tym poście bardziej na samej składni i sposobie pisania w obu językach niż na dostępnych do nich narzędziach czy możliwościach jakie oferują, A więc zaczynajmy…
Nawiasy, nawiasiki i kurli brejse ( { )
Pisząc w Pythonie pierwszą rzeczą jaką zauważa każdy jest brak nawiasów i wydzielania bloków przy pomocy klamerek. Bloki zaznacza się wcinając kod. Jest to dosyć fajne i eleganckie pod warunkiem, że kod który piszemy będzie ostateczny i nie będziemy go musieli poprawiać czy wykomentowywać jakieś podbloki w blokach.
Pisząc pewien skrypt miałem z tym dość duże problemy. Jak dla mnie ten feature składni jest troche chybiony. Natomiast podoba mi się to, że w strukturach kontrolnych (if, for, etc) nie muszę stosować nawiasów. W PHP zawsze mi to jakoś zaciemnia kod. Dla mnie idealnym rozwiązaniem były by klamerki dla bloków i brak nawiasów w strukturach kontrolnych.
Wynik: w zasadzie żadne z rozwiązań mi w stu procentach nie odpowiada. Remis
Refleksja
Nie wgłębiałem się szczególnie w Refleksje w Pythonie (w przeciwieństwie do Refleksji w PHP). Muszę powiedzieć, że samo podejście ideologicznie bardziej podoba mi sie w Pythonie, czyli klasy jako first class objects.
Wynik: +1 dla Pythona
Mechanizmy obiektowości
Głęboki temat. Patrząc na ficzery obu języków, to pod względem możliwości zmiany zachowania klas wygrywa. Ma przesłanianie operatorów, wielodziedziczenie, funkcje dekoratorowe, transparentne gettery i settery i całą wielką armadę magicznych funkcji. Z drugiej strony PHP ma dość prosty model obiektowy w zasadzie żywcem przejęty z Javy. Dodatkowo jest kilka magicznych funkcji i interfejsy przez których implementacje można się “wczepiać” w składnie języka (Iterator, ArrayAccess). Python ma również podobne możliwości na tym polu, jednak sposób implementacji nie bardzo mi się podoba. Wole interface od magicznych funkcji.
Wynik: remis, ze wskazaniem ideologicznym na PHP
Pakiety, przestrzenie nazw
Na tym polu oba języki w zasadzie różnią się tylko składnią.
Wynik: remis
Biblioteka standartowa
Ten temat jest polem do ewentualnego flejma :P. Generalnie rzecz biorąc oba języki mają przepastne biblioteki standartowe. Biblioteka PHP składa się w przeważającej części z funkcji z dodatkiem kilku klas. Natomiast Pythonowa jest raczej obiektowa. Przez większe obeznanie w PHP lepiej porusza mi się po jego bibliotece. Nie wykluczam jednak, że jak bym zaczął dużo pisać w Py, to oswoił bym się i z jego biblioteką.
Wynik: remis (do wszystkiego da się przyzwyczaić)
Rzeczy irytujące
Kilka szybkich rzeczy o których jeszcze nie mówiłem a irytują:
- PHP: niespójność nazewnictwa funkcji,
- Python: zbyt duża konsekwencja w trzymaniu się reguł
Podsumowując, dla mnie oba języki mają swoje zady i walety (jak to mówi Marsjano). Pisząc coś dla siebie w tej chwili wybrał bym Pythona z czystej ciekawości. Natomiast pisząc coś konkretnego kierował bym się zupełnie innymi kryteriami niż te których użyłem do porównania obu języków. Wybrał bym technologie/platformę, która była by najlepsza do danego zastosowania.
Co do samej struktury języków, chętnie zainteresowałbym się językiem, który łączył by zalety obu.