k47.cz  — každý den dokud se vám to nezačne líbit
foto Praha výběr povídky kultura
twitter FB RSS

Atrox\Arr

18. 6. 2012 — k47 (CC by) (♪)

Atrox\Arr je PHP třída in­spi­ro­vaná fra­mewor­kem ko­lekcí jazyka Scala, která im­ple­men­tuje funk­ci­o­nální ne­měn­nou ko­lekci.


Funk­ci­o­nální a ne­měnná zna­mená, že jednou vy­tvo­řená in­stance Arr se nikdy nemůže změnit a každá ope­race s ko­lekcí vy­tvoří novou kopii Arr. Ope­race, které v PHP mění pole/Arra­yAc­cess offsetSetoffsetUnset skončí vý­jim­kou.

Arr je Scalu in­spi­ro­vaná na­to­lik, že všechny metody mají stejná jména, při­jí­mají stejné ar­gu­menty a mají stejné cho­vání (takže pokud tou­žíte po do­ku­men­taci: SeqMap)

Ob­sa­huje kolem stovky metod včetně všech ob­vyk­lých funkcí vyš­ších řádů (map, filter atd.). Metody, které oče­ká­vají ko­lekci jako ar­gu­ment při­jmou všechno přes co se dá ite­ro­vat pomocí foreach (pole, Ite­ra­tor, Ite­ra­to­rAg­gre­gate). Pokud to dává smysl, všechny metody za­cho­vá­vají pů­vodní klíče včetně jejich pořadí.

Za­jí­mavá vlast­nost opsaná ze Scaly je fakt, že Arr je zá­ro­veň funkce. Každá ko­lekce se chová jako funkce, pro­tože mapuje klíče na hod­noty. To má za ná­sle­dek, že můžete Arr po­u­ží­vat všude, kde je oče­ká­vána běžná funkce (tady se hodí metoda withDefaultValue, která způ­sobí, že ko­lekce bude vracet danou hod­notu i pro ne­známé klíče).

Arr můžeme tvořit čtyřmi způ­soby:

// z pole:
Arr::from($array)

// ze seznamu hodnot:
Arr::make(1, 2, 3, 4, 5)

// zkombinováním klíčů a jejich hodnot
Arr::combine([2,4,6], ['uno', 'dos', 'tres']);

// nebo jako rozsah
Arr::range(1, 100);

píše k47 & hosté, ascii@k47.cz