Však tohle funguje nejen ve webovkách, ale i s běžnými daty v aplikaci. Stačí ta data v C++ nasázet do DOMu a prohnat touto šablonou. Na výstupu jsou opět data v DOMu, tentokrát seřazena podle českých pravidel řazení.
Uhhh... to všechno zvládneš v té jedné řádce? Nekomentuji, že pro datové typy mimo text a číslo to je totálně nepoužitelné...
Přiznávám, že pro newebové použití je to poněkud kostrbaté. Však také v C++ nedělám. Ostatní jazyky na to mají kolekce.
Tak s těmi kolekcemi: signatura z C++:
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
PHP má :
bool uasort ( array &$array , callable $value_compare_func )
Konec konců, tohle je úplně stejné v haskellu:
sortBy :: (a -> a -> Ordering) -> [a] -> [a]
Všechny jazyky poskytují stejnou funkci, teď je jen otázka, jak to dokážeš elegantně zavolat, aby to provedlo to správné třídění. V C++ a PHP zapomeň, že by ses elegancí kdekoliv blížil tomu haskellovému kódu. Zdaleka. Jediné, co tě může zachránit v PHP je třeba funkce "array_orderby", kde pokud se zrovna trefíš do toho, co podporuje (což shodou okolností to, co jsem dal jako příklad je), tak to půjde. Zkus to trošku zesložitit a končíš. V C++ nic takového pořádně neuděláš (leda možná pomocí nějakých super-nových feature).
Ale ta pointa není v tom, jestli dokážeš setřídit to pole. Je v tom, jak dokážeš elegantně poskládat dohromady ty "sortBy", "compare" a přístupy k prvkům. A v některých jazycích to jde elegantně a jasně - a v jiných ne. Programátor sice udělá hodně, prostě není pravda, že by se dal stejný kód napsat v různých jazycích plus minus stejně dlouze.