Generické programovanie je štýl písania algoritmov alebo typov, v ktorom nie sú typy definované priamo, ale budú určené neskôr (pri kompilácii - C++/Rust alebo za behu programu - Python/TypeScript) v časti kódu volajúceho generický algoritmus.
To umožňuje výrazne zvýšiť znovupoužiteľnosť kódu a redukovať duplicity a tým aj chyby. Typický use case sú napríklad generické algoritmy Map, Reduce, Filter, alebo generický typ (container) Node v binárnom strome.
V novej verzii Go sa uvažuje pridať formu parametrického polymorfizmu. Nešpecifikovný parameter sa nazýva type parameter a píše sa v zátvorke za názvom funkcie (riadok 6 v príklade nižšie) s kľúčovým slovom type. Pri volaní funkcie s typovým parametrom sa zmení na konkrétny type argument opäť písaný v zátvorke za názvom volajúcej funkcie (riadok 15-16 v príklade nižšie). Zvažuje sa taktiež dedukcia typov (riadok 17 v príklade nižšie). V návrhu sa okrem iného zvažuje, aký ASCII znak použiť, okrúhlu alebo hranatú zátvorku.
Dizajn v Go oproti C++ v návrhu nepodporuje metaprogramovanie ako C++, alebo akúkoľvek formu generovania kódu počas kompilácie, ani type erasure ako Java. Dôvody môžete zistiť v referenciách. Podporuje však napríklad generické funkcie pracujúce s generickými typmi (príklad: func (m *Map(K, V)) Find(k K) (V, bool)).
Generický program v Go
Zdrojový kód si môžete vyskúšať na Go 2 Playground.
|
|
Referencie
Vaše otázky, návrhy a komentáre
Verím, že vás tento návod inšpiroval a budem vďačný ak dáte spätnú väzbu a pomôže mi zamerať sa na to čo by vás zaujímalo.