Sobes.tech
Middle

Čo sú generické typy?

sobes.tech AI

Odpoveď od AI

Generické typy umožňujú definovať triedy, rozhrania a metódy s použitím parametrových typov. To zvyšuje flexibilitu, opätovnú použiteľnosť a typovú bezpečnosť kódu, umožňujúc pracovať s rôznymi typmi údajov bez straty statickej kontroly typov.

Kľúčové výhody:

  • Typová bezpečnosť: Kompilátor kontroluje typy počas kompilácie, čím zabraňuje chybám počas behu spôsobeným nezlučiteľnosťou typov.
  • Opätovná použiteľnosť: Ten istý kód možno použiť s rôznymi typmi údajov, čím sa znižuje duplikácia kódu.
  • Výkon: V niektorých jazykoch (napr. C#) sú generické typy implementované s ohľadom na konkrétny typ, čo môže zvýšiť výkon v porovnaní s použitím Object.

Príklady použitia:

  • Kolekcie: Zoznamy, slovníky, množiny, parametrizované typom prvkov.
  • Metódy: Metódy pracujúce s akýmkoľvek typom údajov, ktorý implementuje určitý rozhranie.
  • Triedy: Obalové triedy, továrne, pracujúce s parametrickými typmi.

Príklad v C#:

// Generický zoznam
List<string> mena = new List<string>();
mena.Add("Alice");
mena.Add("Bob");

// Generická metóda
public T ZiskajPrvýPrvok<T>(List<T> zoznam)
{
    if (zoznam != null && zoznam.Count > 0)
    {
        return zoznam[0];
    }
    return default(T); // Vráti predvolenú hodnotu pre typ T
}

Príklad v Jave:

// Generický zoznam
List<String> mena = new ArrayList<>();
mena.add("Alice");
mena.add("Bob");

// Generická metóda
public <T> T ziskajPrvýPrvok(List<T> zoznam) {
    if (zoznam != null && !zoznam.isEmpty()) {
        return zoznam.get(0);
    }
    return null; // Vráti null pre referenčné typy
}

Príklad v Pythone (type-hinting):

from typing import List, TypeVar

T = TypeVar('T')

def ziskajPrvýPrvok(data: List[T]) -> T | None:
    # Funkcia môže pracovať s akýmkoľvek zoznamom a vraciať prvok z neho
    if data:
        return data[0]
    return None

mena: List[str] = ["Alice", "Bob"]
prvé_meno = ziskajPrvýPrvok(mena) # IDE rozumie, že prvé_meno je str

V niektorých jazykoch (Java) generické typy používajú "zmazanie" (type erasure), kde informácia o type parametra je odstránená počas kompilácie. To môže viesť k určitým obmedzeniam. V iných jazykoch (C#, Go) sa informácia o type zachováva počas behu.

Generické typy sú základným nástrojom na písanie čistého, bezpečného a opakovane použiteľného kódu.