PHP SplQueue – Zpět do minulosti se zásobníkem a frontou

phpTi, co programují již nějaký ten pátek a nezačínali rovnou u PHP si jistě vzpomenou na lekce výukového Pascalu, či rovnou low-level Assembleru. Přesto, že jsme obzvláště na šílený Assembler jistě všichni intenzivně nadávali, nedá mi to, a představím vám v PHP poměrně nové a docela opomíjené datové struktury, které reprezentují tzv. frontu a zásobník, na které jistě s láskou vzpomínáte právě z ASM registrů.

Jedná se o struktury SplQueue a SplStack a jak vám za chvilku předvedu, umí výrazně usnadnit a zpřehlednit práci, kterou jste dosud vykonávali pomocí pole, tedy ne zrovna sémanticky správně a hlavně pomaleji, než to zvládnou tyto struktury.

Fronta (FIFO)

Fronta je struktura, do které postupně vkládáte prvky, které budete později zpracovávat. Při vybírání z fronty struktura vždy vrací prvky v pořadí, v jakém do ní byly vloženy, čili se chová jako běžná fronta v reálném světě.

 Zásobník (LIFO)

Velmi podobná struktura jako fronta, ale jak již její název napovídá, vrací svěřené prvky v opačném pořadí, tedy naposledy vložený prvek se při výběru dostane ven jako první.

Starý přístup přes pole

Jelikož výše zmíněné struktury obsahuje PHP až od verze 5.3.0, jistě byste uvedené problémy řešili následujícím způsobem přes pole.

Téměř by se chtělo říci, že starý způsob je snažší. Je. Ale dle dokumentace není tolik efektivní a hlavně sémantický. Pokud do fronty či zásobníku vkládáte na různých místech v kódu, práce přes datové struktury Spl bude jistě mnohem čitelnější a dá ihned najevo, o jakou strukturu se jedná, než běžné přidání prvku do pole.

Test

Ohledně efektivity jsem se chtěl přesvědčit na vlastní oči, a tak jsem zpracoval vlastní malý test, kdy jsem pracoval s polem, frontou, i zásobníkem v desetitisícových průměrovaných iteracích s postupným vkládáním a následně vybíráním hodnot. Tedy tak, jak bychom tyto objekty většinou využili. V případě fronty se nové datové struktury skutečně ukázaly cca 5x rychlejší, než pole, což v případě objemného množství zpracovávaných dat může být opravdu slušně zrychlení. Ovšem v testech zásobníku byly rychlosti téměř rovnocenné.

Je tedy jen na vás, jaký styl budete používat, ale já volím nové objekty už jen z toho důvodu, že mohou být v mnoha případech mnohem čitelnější než pole.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *