The PHP WTF
Článek byl psán jako Aprílové povyražení a není tedy myšlen vážně.
Na webu najdete spoustu návodů a rad k programování (mnohde včetně použitelných ukázek), ať už obecných nebo těch zaměřených přímo na PHP. Jeden z nejlepších serverů tohoto druhu, se kterými jsem se setkal, je The PHP WTF. Kromě ukázek kódu, které jsou ihned použitelné v praxi, poskytuje i kvalitní výklad problematiky. Podívejte se třeba na to, jak lze otestovat lichost nebo sudost čísla:
<?php // test lichého čísla if ($x/2 != floor($x/2)) { // liché číslo } // test sudého čísla function IsEven($num) { if ($num < 0) return IsEven(-$num); if ($num > 1) return IsEven($num-2); if ($num == 1) return 0; else return 1; } ?>
Obzvlášť druhý příklad se mi jeví velice elegantní a efektivní a ve své aplikaci bych neváhal ho použít bez jakýchkoliv úprav tak, jak je.
Diskuse
Yuhů:
Druhý příklad je obzvláště zdařilý. Myslím, že by se mohl na přednáškách uvádět jako klasický příklad na rekurzi. Píšu si to do poznámek.

Pavel Zbytovský:
Taky klasický přílad se mi zdá vypisování strukturovaných reakcí v diskusi nebo u komentářů. Funkce se volá se svým id a tím se použije pro všechny děti.
Jakub Vrána
:
Díky za námět, už to mám delší dobu mezi tématy článků.


Bohumír Bednařík (BoboCop):
Je to opravdu pěkný příklad rekurze. Musel jsem nad tím sice chviličku přemýšlet, než jsem to pochopil, ale po pak jsem si uvědomil, že je to vlastně velice jednoduché a přitom funkční. Nicméně si nejsem úplně jist tím, jestli by nebylo rychlejší číslo podělit dvěma a zjišťovat zbytek po dělení. Přeci jen u větších čísel by tato funkce mohla být relativně pomalá (alespoň si to myslím - příliš mnoho operací, které by mohly být nahrazeny dvěma - dělení a zjištění zbytku po dělení).Joe:
Ja myslim, ze lepsi nez rekurzivni reseni je urcite obycejna smycka. imho ale zalezi, do jake miry ma interpret php optimalizovany takove postupy.<?php
function IsEven($num)
{
$num = ($num<0)?-$num:$num;
$even = true; while($num-->0) $even = !$even;
return $even;
}
?>
puco:
Ta rekurzia je mozno pekny priklad ale urcite by som to nepuzival. Preco nepouzit function IsEven($num){ return ($num % 2)?0:1; }. Ta rekurzia mi pripomina prolog.
puco:
ze ja sa nepozrem do kalendara aky je datum a potom to tak vypadaJakub Podhorský:
imho by to mělo vracet true a false a ne 1 a 0 :)pif:
asi tak, nechapu proc delat veci slozite kdyz to jde na jeden radek :)
//pomineme ze se to hodi tak na prednasku
llook:
What the f***?

Jakub Podhorský:
mimochodem ještě k The PHP WTF.....ten článek není o tom jak efektivně zjistit lichost nebo sudost čísla ale poukazuje přesně na to jak se to dělat nemá...proč používat zbytečně složitou a pomalou rekurzi když to všechno zvádnu pomocí operátorůjak zde už zaznělo je to krásný příklad toho jak se používá rekurze ale používat to v provozu? děkuji ne zbytečně to prodlužuje kód
Jakub Vrána
:
Lidi, vždyť to byl Apríl. Takhle pitomý způsob zjišťování lichého čísla samozřejmě nemůže nikdo myslet vážně a rozhodně se nehodí ani na přednášku.


Joe:
v zadnem pripade se neda souhlasit s tim, ze je to "krasny priklad rekurze". jestlize mi funkce ve svem tele zmeni svuj obsah a zavola se znovu jen aby se podminka volani preskocila, po navratu z5 se vykonal znovu zbytecne kod neni rekurze, ale cista pomsta svemu hostingu :)Tomáš:
Mě se jako nejrychlejší způsob jeví:<?php
function isEven($num) { return ($num & 1)==0; }
?>
pif:
taky díky za tu inspirativní sajtu s code snippets (PHP WTF), je tam spousta nápadů, který se budou hodit! super
jenom nevím proč se menuje tak difně
pif:
kdo to tady pise za me?
Jakub Vrána
:
Můžu ti říct jenom tolik, že to byl někdo z adresy ch-81-1.coolhousing.cz. Mohl to ale být nějaký tvůj jmenovec.


sh:
jen takovy dotaz neslo by na zjisteni sudeho cisla pouzit taky ten prvni priklad akorat misto != by tam mohlo byt ==<?php
if ($x/2 == floor($x/2)) {
// sudé číslo
}
?>
v6ak:
Určitě, ale toto je kód spíš pro pobavení. Samozřejmě, nejlepším způsobem bude asi modulo dělení: $x%2 == 0 pro sudé a analogicky pro liché.
BTW: Škoda, že ten server tu už není :(

Diskuse je zrušena z důvodu spamu.

