Sobes.tech
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.