Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jeden Wielki OffTopick
Forum PHP.pl > Inne > Hydepark
Stron: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235
Pyton_000
Jak wszystkiego trzeba używać z umiarem, nikt nie będzie strzelał przeca za użycie jednego wyrażenia zamiast std. funkcji.
Ale jak już ktoś odpali reg_exp w pętlli np. 10k elementów zamiast str_replace to już przesada.

Forti
Także jestem ciekawy dlaczego należy ich unikać. Jezeli ktos nie potrafi ich przeczytać to juz jego wina/problem. Ld tego są takie strony jak np. Regex101.
!*!
Cytat(Pyton_000 @ 2.03.2015, 08:51:37 ) *
Ale jak już ktoś odpali reg_exp w pętlli np. 10k elementów zamiast str_replace to już przesada.


Konkrety Panie... Jak masz potrzebę odpalenia 10k preg_* lub str_* to czym przedkładasz jedno nad drugie? Mam dziwne wrażenie że macie jakieś złe wspomnienia z eregi, które dawno wyleciało i było czym innym.
SmokAnalog
Cytat(Forti @ 2.03.2015, 08:53:05 ) *
Jezeli ktos nie potrafi ich przeczytać to juz jego wina/problem.

Tu nie chodzi tylko o to czy ktoś umie czy nie, tylko też o czas jaki to zajmuje, wyłapywanie błędów i tak dalej. Wyrażenia regularne są nieczytelne i nie zmieni tego nawet Twoja doskonała ich znajomość smile.gif Skomplikowanych wzorców się nie czyta jak bajki na dobranoc.
!*!
Cytat(SmokAnalog @ 2.03.2015, 10:36:40 ) *
Tu nie chodzi tylko o to czy ktoś umie czy nie, tylko też o czas jaki to zajmuje, wyłapywanie błędów i tak dalej. Wyrażenia regularne są nieczytelne i nie zmieni tego nawet Twoja doskonała ich znajomość :) Skomplikowanych wzorców się nie czyta jak bajki na dobranoc.


Czyli nie masz żadnego argumentu, poza "bo tak, bo ja nie ogarniam". Równie dobrze mógłbyś napisać że ORM, lub inne metody pomocnicze w budowaniu zapytań do bazy są lepsze, bo sam język SQL jest za trudny.
Forti
Cytat(SmokAnalog @ 2.03.2015, 10:36:40 ) *
Tu nie chodzi tylko o to czy ktoś umie czy nie, tylko też o czas jaki to zajmuje, wyłapywanie błędów i tak dalej. Wyrażenia regularne są nieczytelne i nie zmieni tego nawet Twoja doskonała ich znajomość smile.gif Skomplikowanych wzorców się nie czyta jak bajki na dobranoc.



W przypadku gdy jedynym argumentem jest nie czytelność skomplikowanych wzorców to smutne, ponieważ skomplikowane wzorce z definicji są trudne w czytaniu. Np. prosta walidacja czy mamy do czynienia z kodem pocztowym:

  1. ^([0-9]{2})-([0-9]{3})$


Co jest w tym trudnego do czytania? A zrób to jakimiś funkcjami php. Chętnie porównam wyniki w pętli 1000 wink.gif


edit:

oczywiście, że przeważnie str_replace itp. są lepszym rozwiązaniem. Jednak tam gdzie potrzeba skomplikowanych regex (parsowanie kodu html - łatwiej regex niż jakieś parsery html - oczywiście czasami, nie zawsze) - po prostu po to ktoś je wymyślił. Mają ułatwiać wink.gif
Pyton_000
  1. list($pre, $post) = explode('-', '12-200');
  2. if(is_numeric($pre) && strlen($pre) == 2 && is_numeric($post) && strlen($post) == 3)
  3. {
  4. die('good');
  5. }


tongue.gif
solificati
Cytat(!*! @ 2.03.2015, 10:39:44 ) *
Czyli nie masz żadnego argumentu, poza "bo tak, bo ja nie ogarniam". Równie dobrze mógłbyś napisać że ORM, lub inne metody pomocnicze w budowaniu zapytań do bazy są lepsze, bo sam język SQL jest za trudny.

Taki sam argument jest za stosowaniem refaktoryzacji, "bo bez refaktoryzacji ja nie ogarniam". Programy są pisane tak jak są po to, żeby wszyscy ogarniali.

Wyrażenia regularne to inny język, którego treść jest w stringu. Jest to język, który się w większości implementacji fatalnie formatuje. Wyrażenia regularne mają więcej haczyków w implementacjach w różnych językach niż DOM w IE. Do tego większość ludzi pisze wyrażenia regularne jednocześnie nieczytelnie i niewydajnie. Niektórzy nawet sądzą, że *generowanie* wyrażenia regularnego w kodzie to świetny pomysł.
!*!
Cytat(Pyton_000 @ 2.03.2015, 11:39:25 ) *
  1. list($pre, $post) = explode('-', '12-200');
  2. if(is_numeric($pre) && strlen($pre) == 2 && is_numeric($post) && strlen($post) == 3)
  3. {
  4. die('good');
  5. }


:P


http://php.net/is_numeric

Czyli Twój kod da się oszukać :P

@solificati - pewnie że tak.
Pyton_000
Nie napisałem że to jest ideał wink.gif Pisane na szybko.
Oczywiście że w tym i wielu innych przypadkach lepiej użyć reg_exp.

Niech każdy używa czego chce wink.gif Ja czasami z lenistwa wolę regexp '(slowo|slowo2)' niż bawić się w coś innego. Kontekst jest ważny.

Jak tam Wasze poniedziałki?
mike
Ooo, ten wątek jeszcze żyje? Nieźle.
Pamiętam jak dziś kiedy powstawał smile.gif
Forti
Cytat(Pyton_000 @ 2.03.2015, 12:01:42 ) *
Nie napisałem że to jest ideał wink.gif Pisane na szybko.
Oczywiście że w tym i wielu innych przypadkach lepiej użyć reg_exp.

Niech każdy używa czego chce wink.gif Ja czasami z lenistwa wolę regexp '(slowo|slowo2)' niż bawić się w coś innego. Kontekst jest ważny.

Jak tam Wasze poniedziałki?



Mi łatwiej napisać str_replace tongue.gif

W nocy po żone musiałem pojechać po koncercie, także masakra biggrin.gif a jeszcze po pracy meet.js się szykuje.


btw:

właśnie pierwszy raz w życiu użyłem Trait. Nawet przydatne, co o tym mechanizmie sądzicie?
starach
Cytat(Forti @ 2.03.2015, 13:20:56 ) *
(...)

Ostatnio z uporem maniaka próbowałem w kilku miejscach zastosować traitsy i chyba zrobiłem to dobrze, ale
skoro mają one zastępować szablony z C++ bądź naokoło wdrażać dziedziczenie po wielu klasach którego nie ma w PHP to dlaczego nie mogę zmienić typów argumentów w poszczególnych metodach. W takim \ArrayAccess na przykład by się to przydało.
SmokAnalog
Cytat(!*! @ 2.03.2015, 10:39:44 ) *
Czyli nie masz żadnego argumentu, poza "bo tak, bo ja nie ogarniam".

Kolego wykrzyknik-gwiazdka-wykrzyknik, na każdym kroku każdego pojeżdżasz, zastanawiam się po co. Akurat tak się składa, że znam wyrażenia regularne BARDZO dobrze, zresztą nawet na tym forum pomagałem wielokrotnie z regexem. Po raz któryś już pokazujesz, że nigdy nie pracowałeś nad profesjonalnymi projektami, tworzonymi w grupie programistów. W poważnych projektach kod pisze się tak, żeby był czytelny dla pozostałych programistów. I to nie oznacza, że oni są kiepscy i nie potrafią tego odczytać. Wręcz przeciwnie. To oznacza, że oni mają do roboty 100 innych rzeczy i szkoda ich czasu na analizę kodu, który można było napisać prościej. Tylko że tak jak napisałem wcześniej, z wyrażeniami regularnymi na ten moment zwykle nie ma lepszej alternatywy.
Cytat(Forti @ 2.03.2015, 11:34:52 ) *
W przypadku gdy jedynym argumentem jest nie czytelność skomplikowanych wzorców to smutne, ponieważ skomplikowane wzorce z definicji są trudne w czytaniu. Np. prosta walidacja czy mamy do czynienia z kodem pocztowym:

  1. ^([0-9]{2})-([0-9]{3})$


Co jest w tym trudnego do czytania? A zrób to jakimiś funkcjami php. Chętnie porównam wyniki w pętli 1000 ;)

No jeśli kod pocztowy to najtrudniejszy przypadek jaki możesz sobie wyobrazić, to się nie dziwię, że tak podchodzisz do tematu ;)
Forti
Nie, to jest bardzo prosty przypadek, który pokazuje jak regex jest przydatny. Ciężko to zrobić inaczej - czyściej czy krócej.

Trudny przypadek to idealne parsowanie adresu email:

http://www.regular-expressions.info/email.html

Nawet nie idealne ale zwykłe [a-z0-9]@[a-z0-9].[a-z] już jest trudno zastąpić czym innym pod względem czytelności. A czym bardziej skomplikowany regex na to tym bardziej skomplikowany będzie kod. W końcu zrobi się odzielna klasa - odzielna biblioteka i w końcu cały bundle wink.gif
SmokAnalog
Podany przez Ciebie wzorzec zaakceptuje nawet np. 7@7@x, więc chyba nie za bardzo. Ja lubię czasem krok po kroku analizować string, nie upychać tego na siłę do jednej instrukcji. Chociaż przyznam się, że zbyt często kończę tworząc jeden wielki wzorzec, no ale czytelne to to potem nie jest.
solificati
Cytat(SmokAnalog @ 2.03.2015, 16:29:19 ) *
Tylko że tak jak napisałem wcześniej, z wyrażeniami regularnymi na ten moment zwykle nie ma lepszej alternatywy.

Operatory parserów (parser combinators) albo translatory z gramatyk bezkontekstowych. To dobre rozwiązania do większych problemów.

Co do kodu pocztowego, kiedyś słyszałem taki rule of thumb, że jeśli wywołanie wyrażenia regularnego idzie zamknąć w funkcji to jest ok. Jeśli napotkam wywołanie is-zip-code, to nie muszę się przejmować wyrażeniem w środku, tylko wywołać funkcję. Jak chcę refaktoryzować, zmieniać, debugować to i tak muszę pobrudzić ręcę. Ważne jest też ten fakt o wywołaniu - chodzi o to, żeby nie wyciekały instancje matchera i nie było korzystania z grup poza funkcją. Grupy nazwane częściowo rozwiązują ten problem, ale najlepiej żeby zwrócić stosowną strukturę, bo dociekanie co oznacza null albo false w różnych polach gdy wyrażenie się nie dopasowało jest straszne.
!*!
@SmokAnalog - właśnie czekałem na ten moment w którym będziesz pisał mi, albo Fortiemu w jakich to nieprofesjonalnych grupach pracujemy lub pracowaliśmy. Pytanie było proste, nie odpowiedziałeś, bo argument "kod jest mało czytelny" nie jest argumentem, rzecz względna, tak samo jak pisanie czystego SQL na 50 linijek... Można to ładnie formatować, tylko po co, są proste reguły które się nie zmieniają, już nie mówiąc o kolorowaniu całości przez IDE które pomaga jakby ktoś się gubił w nawiasach... język jak każdy inny.

Zapytać na forum php dlaczego należy czegoś unikać... odpowiedź, bo się gubimy w krzaczkach... boskie...A liczyłem na coś choćby... wyciek pamięci w preg_replace_callback... ale nie, krzaczki i nawiasy dziwnie stoją i nie ma czasu ich ogarniać. facepalmxd.gif
tzm
troche nie ogarniam dyskusji i cisniecia SmokAnalog na te regexy... to powinno byc prosze niz czytanie bajki na dobranoc bo podstawa wyrazen jest logika. jesli komus sprawiaja trudnosc to odnosze wrazenie ze z mysleniem tez moze miec taki problem. to nie jest jakis tam wzorzec projektowy tylko proste wyrazenie opierajace sie o podstawy matematyki wiec wtf? ale to oczywiscie moje osobiste upodobania regexa nad inne funkcje do mielenia stringow. kto co lubi.

@!*! to juz chyba druga dyskusja w ciagu kilku ostatnich dni gdzie Smoku nie potrafi odpowiedziec na proste pytanie. olej bo szkoda nerwow.

@Pyton_000, poniedzialek super. 8 godzin ciecia jakis templatow zeby leciec do klienta na 18:30... takze na poczatek tygodnia po l4 14 godzin pracy lacznie z dojazdami biggrin.gif


nie ma lekko
Posio
Ja zauważyłem że Smok zwyczajnie próbuje każdemu wmówić że to On ma racje...
solificati
Cytat(!*! @ 2.03.2015, 17:19:02 ) *
tak samo jak pisanie czystego SQL na 50 linijek...

Zdajesz się sugerować, że w pliku .php masz stringa z zapytaniem sql.
Pyton_000
Nie macie przyjemniejszych tematów na Poniedziałek zamiast rzucać się do gardeł? Takie rzeczy to w piątek, bo przynajmniej można się uchlać wink.gif
SmokAnalog
Bo wasze argumenty pokazują jasno, że nie mieliście do czynienia z poważnymi problemami programistycznymi. To jest niestety jeden z większych paradoksów na tym świecie, że świeżakowi coś się wydaje trudne, średnio ogarniętemu proste, a ogarniętemu znowu trudne. Wy jesteście w środku tej skali i po prostu nie natrafiliście jeszcze na problemy, gdzie regex nie jest idealnym rozwiązaniem. Wydaje Wam się, że to ja czegoś nie rozumiem, że Wy mnie czegoś uczycie. Ja nic do tego nie mam, kiedyś też mi się wydawało, że umiem więcej niż umiem. Możemy porozmawiać o projektach nad którymi pracowaliśmy i ile czasu programujemy.

tzm, na jakie pytanie nie odpowiedziałem?
usb2.0
tzm
a Ty do ktorej grupy ogarnietych sie zaliczasz?

1. pytali chlopaki dlaczego regex jest gorszy od Twoich rozwiazan. !*! juz wyraznie podsumowal ta dyskusje.

2. postep technologiczny komputerow. 3 osoby, przez 10 postow o cos Cie pytaly, a Ty zamiast odpowiedzi wciskales swoje prawdy. tutaj jest to samo jak z kolei zauwazyl Posio.

x: ktora godzina?
Y: zobacz jaki mam fajny zegarek
x: ale ja chce wiedziec ktora jest godzina
Y: ale to elektroniczny zegarek

i tak do porzygu.

spadam, czesc
SmokAnalog
No jakbyście czytali ze zrozumieniem to byście może jednak znaleźli odpowiedzi. Napisałem wyraźnie, że REGEX JEST NIECZYTELNY I TRUDNY DO SZYBKIEJ I BEZBŁĘDNEJ ANALIZY. Teraz widać?

EDIT Do której ja się grupy zaliczam? Do ogarniętej, bo po prostu od wielu lat pracuję jako programista. Chcąc nie chcąc mam styczność z tym na co dzień.
sazian
równie dobrze mogę napisać:
REGEX JEST CZYTELNY I ŁATWY DO SZYBKIEJ I BEZBŁĘDNEJ ANALIZY. Teraz widać?
nie ? nie widać ?
Przykład Panie, bo tak to można całą wieczność dyskutować
Turson
Ostatnio miałem do czynienia z pluginem, który parsował stringa strpos-em. String wyglądał mniej więcej tak: {PLUGIN}kategoria/13,jakisParametr=1,jakisParametr=0,jakisParametr=1,jakisParametr=0{/PLUGIN}
Tutaj regex pasuje jak ulał. Podstawiamy wyrażenie i pobieramy dane do ładnych zmiennych za pomocą list(). Proste i eleganckie. Ale nie, ktoś wziął się za to strposem...
SmokAnalog
Turson, no pewnie - to jest piękny i prościutki przykład do używania regexa. Ja bardzo lubię funkcję preg_replace_callback do parsowania wszelkich shortcode'ów i innych kontekstowo analizowanych tekstów.

Ale antyprzykładem jest przede wszystkim HTML, XML oraz praktycznie każdy tekst pisany przez człowieka w formie zdań, bo wtedy musimy zakładać bardzo wiele możliwości - mnogość białych znaków, nowych linii itd. Taki wzorzec jest potem po prostu brzydki, długi i łatwo w nim o pomyłki. Poza tym, co zresztą zrobił jeden z kolegów wyżej, bardzo często spotykanym i trudnym do wyłapania błędem jest podawanie wymogu znaku kropki jako ".", co potem kończy się dość tragicznie.

Nie wiem jakie wrażenie odnieśliście po moich wcześniejszych wypowiedziach, ale prawda jest taka, że ja regexy bardzo lubię, ale nie lubię, gdy są nadużywane lub pisane niechlujnie - gdy np. są zbyt tolerancyjne (jak wzorzec e-maila kolegi) lub za mało (np. odrzucające dwie spacje obok siebie w tekście pisanym).

Swoją drogą, metoda na strpos jest jeszcze mniej czytelna niż regex, jeśli się używa tego do czegoś więcej niż sprawdzanie czy ciąg znaków jest obecny czy nie. Do bardziej skomplikowanych operacji na tekście lubię robić to krok po kroku, formatując najpierw tekst do późniejszego przetestowania lub wyłapania czegoś.
mike
Wasza akademicka dyskusja o wyrażeniach regularnych powinna skończyć się dawno temu. Przecież dobre praktyki programowania mówią jasno, że taki nieczytelny dla wszystkich kawałek kodu należy zamienić czytelnym smile.gif czyli na przykład stałą lub zmienną (zależy od kontekstu) o nazwie, która sama się dokumentuje:
  1. $postCodePattern = '^([0-9]{2})-([0-9]{3})$';
  2. $blaBlaCośTuSięDzieje = preg_match($postCodePattern, $input);
nospor
Cytat
Ooo, ten wątek jeszcze żyje? Nieźle.
Wątek? Chłopie, to czy Ty jeszcze żyjesz? Nieźle wink.gif Tak dawnooooooo Cie tu nie było

Skoro jestesmy przy wyrażeniach, to taka mała prywata z ogólnie powszechną prawdą:
http://jokes.nospor.pl/view/id/52/
biggrin.gif
mike
Cytat(nospor @ 3.03.2015, 10:31:15 ) *
Wątek? Chłopie, to czy Ty jeszcze żyjesz? Nieźle wink.gif Tak dawnooooooo Cie tu nie było
A jakoś tak z nudów zajrzałem będąc ciekawym co u Was słychać smile.gif

Cytat(nospor @ 3.03.2015, 10:31:15 ) *
Skoro jestesmy przy wyrażeniach, to taka mała prywata z ogólnie powszechną prawdą:
http://jokes.nospor.pl/view/id/52/
biggrin.gif
Hahaha smile.gif
SmokAnalog
@Nospor - uważaj z tymi cytatami, bo zaraz Cię tu wyzwą, że ich po prostu nie umiesz haha.gif
nospor
A bo to ja napisalem? Ja tylko cytuje biggrin.gif Co nie zmienia faktu, ze tak z 50% prawdy w tym jest. Nie raz na forum widzialem, jak ludzie walczyli z wyrazeniami, a wystarczylo uzyc zwyklej funkcji php do rozbicia tekstu.
Oczywiscie zeby nie bylo, wyrazenia są jak najbardziej potrzebne, ale nei zawsze, i o tym traktuje ten cytat smile.gif
pyro
Cytat(mike @ 3.03.2015, 10:35:10 ) *
A jakoś tak z nudów zajrzałem będąc ciekawym co u Was słychać smile.gif

Hahaha smile.gif


Nigdy nie interesując się szczególnie innymi użytkownikami forum nawet po tylu latach skrawkiem umysłu kojarzę, że teraz się zajmujesz Javą?

Ale mam dobrą pamięć, tran robi swoje.
mike
Cytat(pyro @ 3.03.2015, 11:56:04 ) *
Nigdy nie interesując się szczególnie innymi użytkownikami forum nawet po tylu latach skrawkiem umysłu kojarzę, że teraz się zajmujesz Javą?
Owszem, już od kilku lat żyję w świecie JVM.
solificati
Jakiś język poza Javą na JVM też?

(Ukryte pytanie: Scala czy Clojure)
SmokAnalog
Mike - jak wygląda Wasza relacja z Javą? Lubicie się? Jak wygląda praca developera javowego w porównaniu do pehapowca?
Pyton_000
Lepiej pod prawie każdym względem wink.gif

Czy ktoś się spotkał z czymś takim, że FB przy wklejaniu linku do statusu nie chce go przemielić i wstawić jako box?
Ostatnio dla 2 linków z mojego bloga FB odmawia posłuszeństwa smile.gif

Choćby ten: http://blog.piotrows.pl/laravel-5-czysta-instalacja/

Próbowałem na 2 kompach ale dupa, a niestety nigdzie nie da się wysypać jakiegoś błędu czy coś
tzm
a gdzie masz open grapha? nie ma z czego czytac.
Pyton_000
Ok, ale jak wstawiam inne linki z bloga to już parsuje dobrze, więc to nie jest raczej wina OG
Forti
Przypomnij mi funkcje artisana w laravel? tongue.gif
Pyton_000
Khee??
Forti
edit: lool widze... nvm biggrin.gif
tzm
sprobuj dodac tego open grapha i zobacz co sie stanie, 5 minut roboty a bedziesz wiedzial czy pomoze. facebook jak nie ma open grapha to leci na czuja... widocznie strona nie ma kontekstu, haha biggrin.gif joke
Pyton_000
No niestety nic nie dało wink.gif Jeszcze jakieś pomysły ?
tzm
Z grubsza tylko źródła przejrzałem i nic się nie rzuca w oczy także, rozkładam ręce niestety.

ale wiesz, liczą się chęci haha.gif
SmokAnalog
Wyczyść cache tak jak tu opisują: http://www.marketingyourpurpose.com/facebo...ew-not-working/
mic327
Może ktoś widział jakiś dobry uchwyt do Lumi? Może być też uniwersalny. wink.gif
tzm
Cytat(mic327 @ 4.03.2015, 19:15:50 ) *
Może ktoś widział jakiś dobry uchwyt do Lumi? Może być też uniwersalny. wink.gif


do auta czy taki na biurko powiedzmy stojak?


co to facebooka jeszcze.. faktycznie z tym cache jest jak Smok pisze, facebook sobie taki mini cache robi do tego wiec jak raz nie zadziala to potem nie potestujesz bez resetu, dzis to przerabialem... za pierwszym razem nie dzialalo wiec moze jednak OG pomogl a nie widac?
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.