🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72369

Re: per cgi i for wewnatrz function-oriented

#72369
From: Stachu 'Dozzie' K.
Date: Mon, 17 Oct 2011 07:37
132 lines
7113 bytes
On 2011-10-16, Adam Osuchowski <someone@somewhere.com> wrote:
> Stachu 'Dozzie' K. wrote:
>> Bredzisz. Perl nie jest paskudztwem, co najwyżej pozwala na pisanie
>> paskudztwa. I na ogół paskudztwo piszą kretyni uważający że umieją pisać
>> w Perlu.
>> Ma działać *oraz* ładnie wyglądać. Kod wyglądający jak psu z gardła
>> wyciągnięty to kod gówniany i za pisanie takiego powinno się wieszać za
>> jaja.
>
> Oo, widzę, że się skończyły merytoryczne argumenty i zaczęło się obrażanie.

Jeszcze nie. Nie nazwałem cię jeszcze kretynem (innymi sprawami są czy
się poczuwasz do tego określenia i co ja o tobie myślę).

Poza tym, czy twoim zdaniem dobry kod może wyglądać jak papka
z odchodów?

>> Ja rozumiem. To ty tu prawdopodobnie nie rozumiesz. Do tego do czego
>> użyłeś local, tu należałoby użyć `my @array'.
>
> Użyłem local bo ,,my @_'' jest nielegalne. Zrobienie ,,my @array'' byłoby
> identyczne w skutkach z ew. mikroskopijnym wpływem na wydajność (i to nawet
> nie wiem na czyją korzyść). Gdzie więc to nadużycie, specjalisto?

Nadużycie jest takie, że używasz zlokalizowanej zmiennej globalnej
w charakterze zmiennej lokalnej. Co nie służy do tego.

>> Nie zrozumiałeś. Po prawdzie, nie dziwi mnie to, bo w Perlu pisać
>> najwyraźniej nie umiesz.
>
> Ok, to Twoja opinia, masz prawo ją mieć, a mnie nie chce się Cię przekonywać,
> jak jest naprawdę, więc niech Ci będzie.
>
>> Słyszałeś o takiej funkcji jak do{}? Nie? To doczytaj. `perldoc -f do'
>
> Słyszałem. I uważam, że do jest mniej elastyczne od evala. Chociażby
> w kwestii przerywania sterowania, o czym pisałem.

No jasne. Lepiej jest wprowadzić konstrukcję, w której trzeba dbać
dodatkowo o obsługę błędów, co może prowadzić do trudnych do
zdiagnozowania błędów.

>> Rozwiązaniem jeszcze ogólniejszym jest napisać parser uniwersalnego
>> języka programowania, bo można sobie w nim (w tym nowym języku)
>> oprogramować wszystko.
>
> No i na tym właśnie polega umiejętność programowania, której widać Tobie
> brakuje: umieć zrobić rzeczy na takim stopniu skomplikowania i uniwersalności
> żeby było użyteczne ale żeby nie przesadzić.

No tobie brakuje właśnie umiejętności programowania. Przesadziłeś
z evalem i przesadziłeś z local.

>> Nie wiesz co robisz, skoro użyłeś go tam, gdzie do{} sprawi się równie
>> dobrze, a nie wprowadzi wad które podałem.
>
> To, że w Twoim mniemaniu to jest wada, nie oznacza, że tak jest naprawdę
> albo, że jest tak w każdym przypadku. Skąd wiesz, czy w tym miejscu
> akurat jest akceptowalne przerwanie całego programu tylko dlatego, że
> się nie wykonał jakiś generator? eval właśnie ładnie to ukryje.

Wtedy się dodaje komentarz że eval jest potrzebny. Z twojego przykładu
nie widać żeby był potrzebny, a wprowadza coś, co w przyszłości trudno
się będzie debuggować. W takim przypadku należało użyć do{}.

> Poza tym, jeżeli mój oryginalny kod jest paskudztwem, to zamiana local na my
> i eval na do nic w tej kwestii nie zmienia.

Oczywiście. W pierwszym rzędzie lepiej było utworzyć tymczasową tablicę,
wypełnić ją i dopiero wstawić ją w miejscu kodu. Byłoby czytelniej
i bardziej elegancko.

> Dyskusja o wyższości jednego nad
> drugim jest czysto akademicka, co tym bardziej skłania mnie do wniosku, że
> Twoje posty mają na celu trollowanie, a nie rzetelną dyskusję. Tym bardziej
> że moje rozwiązanie działa, więc nie jest to kwestia ewidentnego błędu
> rzeczowego,

To się nazywa błędy stylistyczne. Kod nie tylko ma działać. Ma jeszcze
nie wyglądać jak kupa gówna, bo później się to źle poprawia.

>> Ja umiem obsłużyć błędy z evala. Ale wcale nie znaczy to że mam ochotę
>> za każdym jednym pieprzonym razem te błędy obsługiwać tylko po to, żeby
>> złapanym die() rzucić dalej.
>
> To sobie użyj do. Można było to od razu napisać, zamiast mądrzyć się 
> na temat obiektów i nomenklatury albo rzucać tekstami o ,,paskudztwie''
> itp. nie mających pokrycia w faktach. Czemuś tego nie zrobił?

Bo ma pokrycie w faktach. A czemu ty nie wyciągnąłeś na swoją obronę
funkcji do{}?

> W tak prostym przykładzie jak był podany, eval praktycznie nie różni się
> niczym od do. Natomiast w ogólnym przypadku eval jest bardziej elastyczny.

I przez to trudniejszy w poprawnym i bezpiecznym użyciu.

>> To raczej ty nie widziałeś na oczy kodu dłuższego niż dwieście linii
>> i pisanego przez czas dłuższy niż dwa tygodnie.
>
> Tak, tak, masz absolutną rację.

Przepraszam, ale taki wniosek mi się nasuwa czytając twój przykład
i twoje argumenty.

> Nigdy nie widziałem takiego kodu, w Perlu
> piszę od wczoraj, a w ogóle to pierwszy kod napisałem przedwczoraj. Jasne...
> Niewiarygodne, z jaką łatwością przychodzi Ci rzucanie pustymi słowami na
> tematy o których nic nie wiesz.

To są wnioski z dyskusji. Nie znam żadnego doświadczonego programisty,
który by wolał bardziej kosztowną metodę wykonania zadania (eval{}
z koniecznością obsługi die()) tylko dlatego, że teoria mówi, że ta
trudniejsza metoda jest bardziej ogólna, mimo że zadanie wcale nie
wymaga ogólności.

>> Śmieszą mnie argumenty o zaletach i przewagach evala z ust osobnika,
>> który nie zna nawet funkcji do{} i nie potrafi przewidzieć, że
>> dokładanie obsługi błędów tam, gdzie błąd mógłby się spokojnie
>> propagować bez przeszkód, jest niepotrzebne i jest głupotą.
>
> A skąd wiesz czy znam czy nie? To, że mam inne zdanie na jego stosowanie
> od Ciebie nie oznacza, że nie znam tej konstrukcji jak również, że nie
> stosuję jej tam gdzie może być przydatna.

No jakoś nie chce mi się w to wierzyć. I nie przekonałeś mnie do swojej
znajomości Perla i do swojej umiejętności (czy w ogóle chęci) pisania
dobrego, eleganckiego kodu.

-- 
Secunia non olet.
Stanislaw Klekot
Technical Details
Message-ID: <slrnj9nmi8.38r.dozzie@jarowit.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news-2.dfn.de!news.dfn.de!feeder.erje.net!feeder.news-service.com!aioe.org!.POSTED!not-for-mail
References: <j79q4p$c7c$1@pippin.nask.net.pl> <20111015112917.6b8b4567@polsl.pl> <slrnj9k088.7mn.dozzie@jarowit.net> <20111016135337.6b8b4567@polsl.pl> <slrnj9lpea.7mn.dozzie@jarowit.net> <20111016152948.6b8b4567@polsl.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news-2.dfn.de!news.dfn.de!feeder.erje.net!feeder.news-service.com!aioe.org!.POSTED!not-for-mail
From: "Stachu 'Dozzie' K." <dozzie@go.eat.some.screws.spammer.invalid>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: per cgi i for wewnatrz function-oriented
Date: Mon, 17 Oct 2011 07:37:17 +0000 (UTC)
Organization: Aioe.org NNTP Server
Lines: 132
Message-ID: <slrnj9nmi8.38r.dozzie@jarowit.net>
References: <j79q4p$c7c$1@pippin.nask.net.pl> <20111015112917.6b8b4567@polsl.pl> <slrnj9k088.7mn.dozzie@jarowit.net> <20111016135337.6b8b4567@polsl.pl> <slrnj9lpea.7mn.dozzie@jarowit.net> <20111016152948.6b8b4567@polsl.pl>
NNTP-Posting-Host: 32kR2H3mw0v3HL1sSnS9/A.user.speranza.aioe.org
Mime-Version: 1.0
X-Complaints-To: abuse@aioe.org
User-Agent: slrn/pre0.9.9-111 (Linux)
X-Notice: Filtered by postfilter v. 0.8.2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit