Middle
Co jsou generické typy?
sobes.tech AI
Odpověď od AI
Obecné typy (Generics) umožňují definovat třídy, rozhraní a metody s použitím parametrů typu. To zvyšuje flexibilitu, znovupoužitelnost a typovou bezpečnost kódu, umožňuje pracovat s různými datovými typy bez ztráty statické kontroly typů.
Klíčové výhody:
- Typová bezpečnost: Kompilátor kontroluje typy v době kompilace, čímž předchází chybám za běhu souvisejícím s nesouladem typů.
- Znovupoužitelnost: Stejný kód lze použít s různými datovými typy, což snižuje duplicitní kód.
- Výkon: V některých jazycích (například C#) jsou generické typy implementovány s ohledem na konkrétní typ, což může zvýšit výkon ve srovnání s použitím
Object.
Příklady použití:
- Kolekce: Seznamy, slovníky, množiny parametrizované podle typu prvků.
- Metody: Metody pracující s jakýmkoli typem dat, který implementuje určité rozhraní.
- Třídy: Obalové třídy, továrny, které pracují s parametry typu.
Příklad v C#:
// Obecný seznam
List<string> jména = new List<string>();
jména.Add("Alice");
jména.Add("Bob");
// Obecná metoda
public T ZískejPrvníPrvek<T>(List<T> seznam)
{
if (seznam != null && seznam.Count > 0)
{
return seznam[0];
}
return default(T); // Vrací výchozí hodnotu pro typ T
}
Příklad v Javě:
// Obecný seznam
List<String> jména = new ArrayList<>();
jména.add("Alice");
jména.add("Bob");
// Obecná metoda
public <T> T ZískejPrvníPrvek(List<T> seznam) {
if (seznam != null && !seznam.isEmpty()) {
return seznam.get(0);
}
return null; // Vrací null pro referenční typy
}
Příklad v Pythonu (tipování):
from typing import List, TypeVar
T = TypeVar('T')
def ZískejPrvníPrvek(dáta: List[T]) -> T | None:
# Funkce může pracovat s jakýmkoli seznamem a vrátit prvek
if dáta:
return dáta[0]
return None
jména: List[str] = ["Alice", "Bob"]
první_jméno = ZískejPrvníPrvek(jména) # IDE chápe, že první_jméno je str
V některých jazycích (Java) používají generické typy "vymazání" (type erasure), kdy informace o typu parametru je odstraněna při kompilaci. To může vést k určitým omezením. V jiných jazycích (C#, Go) je informace o typu zachována během běhu.
Generické typy jsou základním nástrojem pro psaní čistého, bezpečného a znovupoužitelného kódu.