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