Sobes.tech
Middle

Čo sú generiká?

sobes.tech AI

Odpoveď od AI

Generik (Všeobecné typy) je mechanizmus, ktorý umožňuje písanie tried, rozhraní a metód, ktoré pracujú s údajmi rôznych typov, pričom zabezpečujú typovú bezpečnosť počas kompilácie. Umožňujú vytváranie opakovane použiteľných komponentov, ktoré môžu pracovať s akýmkoľvek typom údajov, bez straty informácií o type, čo minimalizuje chyby pri konverzii typov počas behu.

Hlavné výhody:

  • Typová bezpečnosť: Kompilátor kontroluje správnosť použitia typov v generických štruktúrach.
  • Zníženie množstva kódu: Jedna generická trieda alebo metóda môže pracovať s viacerými typmi.
  • Čitateľnosť kódu: Je jasné, s ktorými typmi komponent pracuje.
  • Zlepšenie výkonu (v niektorých prípadoch): Nedostatok potreby konverzie typov počas behu môže mierne zlepšiť výkon.

Príklad (Java):

// Príklad generickej triedy
class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

// Použitie generickej triedy s rôznymi typmi
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Typová bezpečnosť, nie je potrebná konverzia

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Typová bezpečnosť, nie je potrebná konverzia

Príklad (Python - Type Hinting, približne k generikom):

from typing import TypeVar, Generic

T = TypeVar('T')

class Box(Generic[T]):
    def __init__(self) -> None:
        self._content: T | None = None

    def set_content(self, content: T) -> None:
        self._content = content

    def get_content(self) -> T | None:
        return self._content

# Použitie s type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Pomáha nástrojom pre statickú analýzu

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Pomáha nástrojom pre statickú analýzu