Názory ke článku Efektivně v PHP
To pawlik: taky jsem na nejaky takovy cekal :), hlavne se me u zacatecniku nelibi pouzivani
if:
blabla
endif;
přece jenom verze se závorkami je hezčí :)
Tak jestli jsi někdy používal tu funkci na odstranění lomítek, tak seš fakt krutor :D by mě to nenapadlo..ještě že nejsem línej hledat předpřipravený fce ;)
To pecan987: Někde jsem tuším četl, že se do budoucna počítá pouze s podporou závorek u podmínek... Takže bude konečně pořádek :-)
To Mautinek: a ja to zas někde četl přesně naopak a nakonec to taky někdo v diskuzi tady na programujte potvrdil (že se vypusti {}). osobně s tím nesouhlasím, a vlna opdoru tomu už myslím snad i zabránila.
To morpheus: On to je tak tochu syndrom zacatecniku, ja zacinal podobne, na vsechno sem si vytvarel funkce nez jsem pochopil, ze daleko pohodlnejsi a prehlednejsi je je pouzit uz existujici... a pouzival sem presne tak zbytecny jako ta s orezevanim lomitek, i kdyz musim uznat ze to je fakt sila... :)
To SendiMyrkr: kdyz sem objevil fkc trim, chtel jsem se skoro podrezat.. :D
To hrach: Je blbost to dělat naopak :). Bylo by to strasne neprehledne met ve forech a whilech zavorky a v podminkach delat vyjimku
To hrach: jj máš pravdu, už se to tu na Programujte řešilo, ale o tom vypuštění if...endif jsem četl myslím u někoho na blogu...
To hrach: jj to znam velmi dobre.... kdyz nekolik hodin promejslis nejakou fci a pak zjistis ze uz existuje a este navic primo v php... :)
To SendiMyrkr:
To mi něco připomíná ... No, z funkcemi je vůbec psina :) Čím dál tí zjišťuji, jaký má člověk neuvěřitelný talent komplikovat jednoduché věci aneb "proč chodit s kanónem na vrabce?"
10. 12. 2007
To pecan987: Přesně pro tohle mám rád assembler. Tam nikdo neřeší závorky a podobné pi.*, ale skutečnou efektivitu kodu.
10. 12. 2007
To SendiMyrkr: Hezký, možná. Efektivní, možná. Další chyba programovacích jazyků. Když voláte nějakou funkci, není jasný, CO se děje uvnitř a jestli z hlediska doby provádění není lepší si to napsat znova a jinak.
10. 12. 2007
Tohle není o EFEKTIVNÍM kodu, ale o PĚKNÝM kodu, což může být mnohdy propastnej rozdíl. EFEKTIVNÍ kod je optimalizovanej na comožná nejkratší provádění, kdežto PĚKNEJ kod je optimalizovanej na oko programátora. Dlužno poznamenat, že program vykonává počítač, ne programátor.
Například, horda if zasebou může být naopak správně, pokud předpokládáte, že se hodnota některý proměný bude měnit. Pokud pomocí toho if budete vyhodnocovat např. co má danej skript udělat a po udělání něčeho má následovat udělání něčeho jinýho, tak můžete buď udělat hordu if zasebou a ty jednotlivý bloky tam nacpat ve vhodným pořadí a hejbat hodnotou tý rozhodovací proměný, nebo to můžete udělat celý jako funkce, pomocí if a else if rozhodnout, která funkce se má zavolat, z ní pak zavoláte tu dodělávací (příp. další dodělávací) a nakonec uděláte zběsilej return. Takže, zlikvidujete nevzhledný if pomocí else if, v čemž osobně nespatřuju žádnou výhodu, přidáte tam volání funkce a návrat z funkce, přičemž v kritickým případě neušetříte vubec nic. Takže co bude ve výsledku rychlejší? Pokud se budem bavit o nějakým kompilovaným jazyku, tak jednoznačně ta varianta s if, protože function call je jedna z nejdelších operací. Pokud se budem bavit o PHP, tak je to jedno, protože celej ten skript se musí nejdřív parsovat (bez ohledu na to CO se z něho bude využívat) a to trvá nejdýl, takže co řešíme?
Pokud bych se teda vrátil k příkladu, tak nejrychlejší bude řešení s array, protože tam je nejmíň textu (blbá vlastnost všech interpretovanejch jazyků včetně PHP - čím víc písmenek, tím dýl to trvá. Pěkně bylo tohle vyřešený například u basicu v Commodore 64, protože tam se parsovalo už při psaní programu, nějak podobně funguje zend optimizer). Z toho titulu bude patrně v php rychlejší volání vnitřních funkcí, ale ne vždy, což je ovšem potřeba vyzkoušet, protože je to navíc na různejch verzích PHP různě, až na takový ty tragický stálice, jako je např. regexp.
Využití dostupných funkcí je základní vlastnost dobrého programátora.
Tohle je zrovna docela blbost. Opět, php není programovací jazyk, ale jakási skriptovací obluda, leč i obludy mají právo na život. Ne vždy je zabudovaná funkce rychlejší, než to, co napíšete a to i za cenu toho, že to bude muset interpret překousat. Konkrétně ten příklad s tím empty bude ve výsledku trvat dýl, než podmínka.
Ta funkce pryč_lomítko možná vypadá divoce, ale já bych to tak tragicky neviděl. Jednak mám nejasnej pocit, že trim dělá něco trochu jinýho, než ta funkce. trim imho odstraní všechny lomítka ze začátku i z konce toho stringu, čili klidně 50, což ta funkce rozhodně ne, ta uhřufne nanejvýš jedno z každý strany. Čili ten zápis není ekvivaltentní a pak jde jaxi jenom o to, CO vlastně chtěl autor udělat.
BTW test pro zvídavé. Co udělá trim zadané přesně jako v tomto příkladu, když mu předhodíte string plnej lomítek? Zkuste si sudej i lichej počet ;-). Trochu záleží na tom, co máte za PHP a nedoporčuju zkoušet na produktivním serveru.
S umem programovat souvisí i jeho „štábní kultura“.
Né a né a nesouvisí a souviset nesmí! To je jako kdyby někdo posuzoval jízdní vlastnosti auta podle toho, jaký ma na sedadlech potahy. Tohle je přístup školometskej a já osobně ho nesnáším. Tím mne děsili absolventi Metráckýho učiliště.Tam museli udělat několik elektronickejch výrobků. Oni něco postavili, zjistili, že to nefunguje, tak to opravovali, čímž to přestalo být vzhledný, to je jasný, ale nakonec to rozchodili. I výsledek? Jednička za funkčnost, koule za provedení, výsledná za tři. OK, to je správně. Jiní vychcánkové to udělali jinak. Vyprdli se na to něco opravovat, takže to vypadalo úžasně, leč nefungovalo to. Funkčnost koule, provedení za jedna. Výsledek za tři, čili stejně, jako když to budete opravovat, tak promrháte odpoledne, riskujete, že to nedáte dohromady a nakonec za to dostanete stejnou trojku. To je právě chyba!!! Mezi normálníma lidma je totiž rozhodující výsledek a pokud to nefunguje, může to být jakkoliv úhledný, je to prostě špatně a hotovo! A totéž platí v programování. Buď to funguje, pak je to dobře a je mi jedno JAK to je udělaný, nebo to nefunguje a pak si programátor nezaslouží slitování. Kultura kodu je věc programátora, ON se v tom bude muset vyznat pro případ, že bude potřeba udělat nějaký změny a je to JEHO problém. To není ničich vizitka.
Já na uvedeným příkladu nevidím nic neprůhlednýho a nemůžu říct, že by to bylo na první pohled nepochopitelný. Takže pokud se to tak autorovi zdá, tak mohu pouze prohlásit, že se nevyzná v NORMÁLNÍM kodu, což je ale jeho problém. Asi by to chtělo víc praxe nad cizím kodem.
To benghi:
- je to všechno věc nazoru!
Tohle není o EFEKTIVNÍM kodu, ale o PĚKNÝM kodu
tak proč nepíšeme teda všichni www v assembleru? EFEKTIVN9 kod je ten(podle mne, a zde se asi rozcházíme), jenž je "logicky správný - neprovádí se zbytečnosti", je "průhledný". pokud chceš, tak víš o čem mluvím. nebudu to víc rezepisovat.
Například, horda if zasebou může být naopak správně, pokud předpokládáte, že se hodnota některý proměný bude měnit.
Programovat možná umíš, ale číst zřejmě ne. Přečti se text článku a komentuj to, co je tam napsaný.
Pokud bych se teda vrátil k příkladu, tak nejrychlejší bude řešení s array, protože tam je nejmíň textu (blbá vlastnost všech interpretovanejch jazyků včetně PHP - čím víc písmenek, tím dýl to trvá.
řeším tu něco jiného než PHP?
Opět, php není programovací jazyk, ale jakási skriptovací obluda.
názor...
Ne vždy je zabudovaná funkce rychlejší, než to, co napíšete a to i za cenu toho, že to bude muset interpret překousat. Konkrétně ten příklad s tím empty bude ve výsledku trvat dýl, než podmínka.
To sem netvrdil. Ale proč vymýšlet kolo?
Ta funkce pryč_lomítko možná vypadá divoce, ale já bych to tak tragicky neviděl. Jednak mám nejasnej pocit, že trim dělá něco trochu jinýho, než ta funkce. trim imho odstraní všechny lomítka ze začátku i z konce toho stringu
Jj, to je pravda, ale záměr byl stejný (!) :) Tím jsem chtěl poukázat, že v 75% případů a myslím, že snad i víc, se prostě programuje něco, co už jazyk dávno umí. A líp :)
Né a né a nesouvisí a souviset nesmí!
Ty snad neumíš číst! :D Kurník, za mé věty vsugerováváš svůj subjektivní pocit! Dvakrát čti a jednou komentuj. A ptám se, kdo dostane lepší známku, ten, kdo opraví auto a bude vypadat hezky, nebo jen ten, jehož nefukční auto bude vypdat hezky. Tak prosím, trochu sebeuvědomění!
A není pravda, že se v tom musí vyznat sám. Ne, pokud to není www stránka mé babičky, tak na tom opravdu nepracuji sám. Ne? Minimálně v časovém horizontu.
Asi by to chtělo víc praxe nad cizím kodem.
Asi by to chtělo projít si zdrojáky fora MiniBB - http://www.minibb.net/ a zjistíte, co je to vtip v PHP.
Jinak děkuji za připomínky
1. dal by sa použiť ternárny operátor:
$hlasu=(0 !== $clanek["hodnoceni"]) ? "Již {$clanek["hodnoceni"]} hlasovalo." : "";
2. prípadne možnosť s inicializáciou premenných:
$hlasu ="";//nemiesam typ premennych
if ($clanek["hodnoceni"] !== 0) { $hlasu = "Již {$clanek["hodnoceni"]} hlasovalo.";}
3. vylepšená verzia 2 - reťazec ide na výstup ( echo, prípadne pripojiť k premennej výstupu)
$out="nejaký výstup";
...
if ($clanek["hodnoceni"] !== 0) { $out .= "Již {$clanek["hodnoceni"]} hlasovalo.";}
To tiso: jasny :) plno moznosti, tam slo spis o tu upravu kodu :)
To benghi: problem je v tom ze tohle nikdo nezaplati a malokdy se setkate s webem kde by rozdily zlomku vteriny hraly nejakou dulezitou roli.... ano je mozne ze bude nejaka fce pracovat neefektivne, v pripade php dokonce dost pravdepodobne, ale rozdil mezi vlastni a pripadne neefektivne pracujici fci bude znatelny na strankach s velkou navstevnosti a ve vetsine pripadu je programovani takovychto fci bohuzel jen ztrata casu... jenom pro zajimavost, mate nejakou ukazku takoveho pripadu kdy uzivatelska fce je rychlejsi nez integrovana?
10. 12. 2007
To SendiMyrkr: takovou funkci asi těžko najdete když se funkce napsaná v PHP musí napřed interpretovat přes PHP...interní funkce jsou psané v C takže to bude vždycky ryhlejší
10. 12. 2007
To tiso: ternární operátor raději ne :) někdo je šíleně pomalej hlavně ve spojení se stringama víc se člově dočtě na http://latrine.dgx.cz
To benghi: jo v tom jsem se snazil naucit, zatim jsem nepochopil VUBEC ale opravdu VUBEC nic :)
To Podhy: čítal som, ale rozlišuj konkrétnu situáciu (2-miestne číslo+-) od špeciálnych prípadov...
Abych uvedl výše uvedené pochybnosti na pravou míru:
http://programujte.com/index.php?akce=clanek&cl=2006121403-vyvoj-php-6
btw: tím člověkem, co informoval na fóru, jsem byl já a mé informace se vztahovali k tomuto článku.
12. 12. 2007
BTW - jaký je váš názor na switch z hlediska výkonu? Třeba zrovna na příkladu z článku:
switch($bod){
case(0):
$color = "color:#d52b05";
break;
}
atd..
12. 12. 2007
V závěrečném odstavci je uvedeno
"tento článek je součástí kurzu či seriálu, ke kterému máte možnost odevzdávat úkoly. .."
Běží tady teď nějaký seriál o PHP ?? A nebo ho chystáte???
To gui: tento článek nepatří do žádného kurzu. kdysi zde kurzy probíhali. možná se i něco chystá - nevím :)
Pěkně napsané, i když nic nového článek nepřinesl. Kritizované chyby v kódu ale většinou zpomalují jen programátory. Php si stejně celý skript přechroustá a optimalizuje, takže if, if/else nebo switch se řešit nemusí. Co program ale určitě zpomalí je práce se soubory, sítí nebo sql a/nebo nevhodné cyklení.
To Non_E: no tak php si ten kod vzdycky prelouska... ale optimalizuje?? to bych si fakt nemyslel....
no...nevhodne zacykleni bych nenazyval zpomaleni :)
Prave pisem jeden PHP kod a napadlo ma:
if (empty($filename))
{
$this->filename = $this->defaultFilename;
}
else
{
$this->filename = $filename;
}
je to iste ako:
$this->filename = (!empty($filename)?
$filename : $this->defaultFilename);
// !empty($filename) je to iste ako $filename ale pre prehladonst je tam !empty()
simple :)
25. 12. 2007
$fun = mojaFunkcia();
if(!$fun)
{
echo "chyba:...";
}
je to iste ako :
if(!mojaFunkcia())
{
echo "chyba: ...";
}
// nenechajte sa oklamat, funkcia mojaFunkcia() sa vykona aj ked ju vlozim do podmienky ;)
8. 1. 2008
no mne sa nepacia tie zapisi:
$hlasu = "Již {$clanek["hodnoceni"]} hlasovalo.";
prehladnejsie sa mi zda
$hlasu = 'Již $clanek[hodnoceni] hlasovalo.';
To malek: oooo, o tom sem nevedel. dekuji za informaci. :) nad druhou staranu, neni to vzdy pouzitelne .. :)
30. 1. 2008
To skybedy: switch je nejrychlejsi. Urcite hrave prekonava if podminky a myslim ze nez pole bude take rychlejsi.
To Jan Kodera: nesouhlasim, vice:
http://latrine.dgx.cz/php-pomale-switch-a-case
11. 3. 2012
Podle mě, by bylo mnohem lepší u prvního příkladu použít switch.. je přehlednější :)