Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]jak pisać kod
Forum PHP.pl > Forum > PHP
wNogachSpisz
Kiedy pisze kod staram się unikac wyrazen regularnych, xpathy i podobnych – na pierwszy rzut oka – nic nie mówiących linii kodu.
Wole zapisac dłuższy kod, gdzie po rzuceniu okiem na lika linii już wiem o co chodzi, niż wyrażenie regularne nad którym musze zatrzymać oko żeby zrozumieć..

Niby niepozorna rzecz.
Jednak gdy przychodzi momenty, gdy masz do naprawienia buga, dużo łatwiej analizować kod który jest „rozmyty” -- tutaj brakuje mi terminu, bo to zjawisko pewnie ma fachową nazwę.

Jak wy sobie z tym radzicie..

P.S
Zadanie: kto wie co robi ten kod:
  1. $dom->getElementsByTagName('table')->item($i)->$trList->item($j)->getElementsByTagName('a')->item(0)->getAttribute('href')


Jeśli wiesz, to spróbuj teraz napisać to samo przy pomocy preg_match biggrin.gif
nospor
Ja tam nie unikam wyrażen. One wręcz powodują ze kod jest czytelniejszy. Zamiast 100 linijek potwórków masz jedno wyrażenie i już.

Kod co podałeś pobiera atrybut HREF wszystkich A znajdujących się w tabelach.

Cytat
Jeśli wiesz, to spróbuj teraz napisać to samo przy pomocy preg_match
I że niby to ma być argument za nieużywaniem preg_match?? No bez jaj... jedne rzeczy robi się przy pomocy wyrażen inne nie. Wszystko zależy co potrzebujesz zrobić.

Armaty używasz by rozwalić np. mur a nie zabić muchę. Wg twojej argumentacji, zawsze należałoby używać packi na muchy, nawet idąc na zamek tongue.gif
wNogachSpisz
Mam nadzieje, że nigdy nie będę musiał usuwać BUGów w twoim kodzie..
nospor
Bo używam wyrażen, tam gdzie ich używać należy? WOW, jestem pod niesamowitym wrażeniem...
Nie znasz się na wyrażeniach i próbujesz zasugerować, że każdy kto ich używa to zło wcielone? Czy może jednak nie znasz wyrażen regularnych i próbujesz się tylko usprawiedliwić? Wybacz, nie rozumiem sensu tego tematu. Moze go wytłumaczysz?
Orzeszekk
Za testy jednostkowe sie wezcie a nie kłócicicie sie o pierdoły smile.gif
by_ikar
Jak jest jakaś linijka kodu, którą trzeba by dłużej analizować żeby ją zrozumieć, to taką linijkę dobrze opisać jakimś komentarzem, wtedy przy późniejszych modyfikacjach nie trzeba się zastanawiać, wystarczy przeczytać komentarz.

EDIT: ajj zapomniałem, że w twoich tematach miałem się nie wypowiadać..
wNogachSpisz
Cytat(Orzeszekk @ 29.02.2012, 11:46:24 ) *
Za testy jednostkowe sie wezcie a nie kłócicicie sie o pierdoły smile.gif

Chodzi o wygodę, nie wydajność - zawsze myślałem że PHP jest jęyzkiem dla wygodnickich smile.gif
nospor
@wNogachSpisz a teraz ja mam dla ciebie zadanie
Z tekstu:
'sdfds ds fds sd fsdlsk sd sdf jsdkf sd#cos.tam# ddsfsdfdsfd sfsd
sd fds ds sd
sd fdsfdsfsdf sd #inne.cos# asd dsf dsfdsf sdf sd #ala.ola#dsfdsfsdfdsfdsfdsfdsdsf#blabla#sdfsdfsdfsdf
'

Wyodrębnij mi wszystkie teksty z #tutaj.cos#


ps: oczywiście nie używaj wyrażen, tylko swojego "wygodnego" sposobu
Crozin
Cytat
Jeśli wiesz, to spróbuj teraz napisać to samo przy pomocy preg_match biggrin.gif
Ale czekaj... wiesz, że wyrażenia regularne nie służą* do parsowania dokumentów XML/SGML-podonych? Tak więc czego oczekujesz... że jakiś idiota będzie się męczyć ze zrobieniem czegoś kompletnie nieodpowiednim narzędziem?

* z drobnymi wyjątkami, gdzie mamy bardzo okrojony "dokument", a raczej jego maluteńki, bardzo "regularny" fragment.
Orzeszekk
Cytat(wNogachSpisz @ 29.02.2012, 11:48:13 ) *
Chodzi o wygodę, nie wydajność - zawsze myślałem że PHP jest jęyzkiem dla wygodnickich smile.gif


Testy jednostkowe pisze sie właśnie dla własnej wygody, żeby mieć kontrolę nad tym czy dziala aplikacja czy nie.

Wyobrazasz sobie testowanie 100 tys linijkowej aplikacji w PHP za pomocą stada testerów przed każdym releasem? Przetestowanie każdego wątku, każdego biegu wydarzen jaki może się wydarzyć? Moje doswiadczenie mi podpowiada ze jest to niemozliwe, pewnie w duzych firmach dałoby rade dużym nakładem kosztów, ale to i tak sie nie oplaca. 8 godzinne klikanie na stronie i sprawdzanie czy wszystko dziala to praca godna gimnazjalisty a nie normalnego czlowieka.
Pisanie czegos ciekawego, bez testów, w PHP, języku który błędy w pisowni pokazuje nie programiscie, w oknie IDE, tylko zdziwionym uzytkownikom jest czystym masochizmem. Psucie dobrych kawałków kodu, przez przypadkowe zmiany w innych sprawia ze czlowieka szlag trafia i nigdy nie wie czy ta aplikacja w sumie dziala czy nie dziala.

a jak jakas linijka kodu jest trudna do zrozumienia to sie ja podobno powinno wydzielac do osobnej metody, ale ja sie nie znam
nospor
@wNogachSpisz i jak tam idzie zadanko? No to jest dosłownie na minutę roboty, wiec czemu to tak długo trwa?
Sephirus
Wyrażenia regularne stosuje się do ciągów tekstów posiadajacych pewną regularność. Zatem do walidacji pól, danych otrzymanych od użytkownika nadają się wyśmienicie.

Do czego jeszcze:
- do plików CSV jeśli mamy określoną liczbę pól (oczywiście wystarczy tutaj explode() ale są tą teksty regularne więc zastosowanie preg_match też jest poprawne)
- do struktur ze znacznikami (XML,HTML itp) w niektórych przypadkach gdy prawdziwe jest założenie o regularności
- do wielu wielu innych rzeczy gdzie mamy do czynienia z tekstami regularnymi...

Oczywiście wielu z nas próbuje zastępować preg_matche (bo to najłatwiejsze) na inne metody, będące bardziej wydajne. Trzeba się jednak zastanowić i może nawet sprawdzić czy zawsze druga metoda jest wydajniejsza od preg_matchy ... Wcale bym się nie zdziwił gdyby pomysł autora tematu z wykorzystaniem DOM był o wiele mniej wydajny dla masy wyszukiwań w HTML/XML smile.gif Z kolei przy sprawdzaniu na przykład czy string zaczyna się od "coś" wystarczy dać strpos() zamiast preg_match('/^coś/si') itd... Zatem IMHO używanie preg_match jak i innych technik jest poprawne tam gdzie jest wydajne i daje zamierzony efekt smile.gif

Tak więc podsumowując - programowanie i język jest dla programistów... robimy tak by było wydajnie i wygodnie dla nas. Więc jest pełna dowolność (oczywiście z zachowaniem rozwagi) w wyborze techniki/techonologii.

Osobiście często używam zarówno preg_matchy jak i kombinacji strpos'a, czy DOM'a - ale zależnie od potrzeby smile.gif

P.S. Jeśli się naprawdę dobrze zna wyrażenia i XPath'y to debuging kodu wcale nie jest aż tak skomplikowany - choć faktycznie przy "rozmytym" kodzie jest nieco prościej smile.gif

Cytat
Chodzi o wygodę, nie wydajność - zawsze myślałem że PHP jest jęyzkiem dla wygodnickich


Ciekawe podejście do tematu programowania... Musze to powiedzieć mojemu CEO przy jednym z projektów przygotowywanym na gigantyczny ruch... haha.gif
- Czemu ta strona ładuje się w 10 sekund?
- Bo tak mi było wygodniej...

tongue.gif
Uriziel01
@nospor - Panie moderatorze, taka zgryźliwość Ci nie przystaje wink.gif

A co do samego tematu, to go nie rozumiem. Chcę parsować XML'e to używam narzędzi do parsowania XML'a nie wyrażeń regularnych. Reg expy to najnormalniejsza w świecie rzecz, brak najomości wyżej wymienionych to raczej wstyd aniżeli powód do przechwałek (ale to tylko moje zdanie), sam nie czuje się zbyt mocno w wyr. regularnych ale pozwalają one tak neisamowicie przyspieszyć pewne procesy że nie wyobrażam sobie życia bez nich.

Cytat
Chodzi o wygodę, nie wydajność
- Łat da fak ? sciana.gif

EDIT:
Swoją drogą czemu do cholery służy ten temat ? Takie coś to może co najwyżej do działu offtopic trafić, nie tutaj.
nospor
Cytat
@nospor - Panie moderatorze, taka zgryźliwość Ci nie przystaje

9. Moderator nie jest zgryźliwy. Moderator dobitnie próbuje na przykładach pokazać, że przeciwnik zboczył troszkę ze ścieżki dobra (znaczy z dobrego programowania) i że argumenty których używa są poprostu bez sensu.
wink.gif

Cytat
Swoją drogą czemu do cholery służy ten temat ?
TEż o to pytałem, ale nie uzyskałem odpowiedzi smile.gif
Orzeszekk
regexpy są super, szkoda tylko że niemal każdy język ma własną składnię wyrażen regularnych, jakby nie mogli z nich zrobic standardu jak html, skoro wszystkie robią prawie to samo.
Sephirus
To nie jest do końca tak smile.gif

Większość języków/technologii wspiera przynajmniej w jakiejś części regexy z POSIX

Jeżeli ktoś używa PHP, JS, AS lub pisze regułki pod Apache czy SQL to sobie bez problemu poradzi... smile.gif Zasady są takie same - różni się na ogół jedynie samo tworzenie i używanie wyrażeń jednak w większości przypadków dany "pattern" działa w wielu miejscach bez zmian tongue.gif
Methestel
xPath - "nic nie mówiąca linia kodu"? Właśnie dzięki xPath mógłbyś przerobić swojego potworka tak że na pierwszy rzut oka widać byłoby co wyciągasz z XML-a.
by_ikar
Cytat(Sephirus @ 29.02.2012, 13:07:41 ) *
To nie jest do końca tak smile.gif

Większość języków/technologii wspiera przynajmniej w jakiejś części regexy z POSIX

Jeżeli ktoś używa PHP, JS, AS lub pisze regułki pod Apache czy SQL to sobie bez problemu poradzi... smile.gif Zasady są takie same - różni się na ogół jedynie samo tworzenie i używanie wyrażeń jednak w większości przypadków dany "pattern" działa w wielu miejscach bez zmian tongue.gif


Dokładnie tak, a jak już się zna jakieś średnio zaawansowane podstawy (jak się ogarnia przewidywania i pozostałe warunki) to czy to w większości języków jakoś nie specjalnie straszny jest ten regexp. Mnie regexpy akurat pasują, jak się je w w miarę rozumie, to są całkiem przyjemne wink.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.