Sobes.tech
Middle

Co jsou generika?

sobes.tech AI

Odpověď od AI

Generika (Obecné typy) jsou mechanismus, který umožňuje psát třídy, rozhraní a metody, které pracují s daty různých typů, přičemž zajišťují typovou bezpečnost během kompilace. Umožňují vytvářet znovupoužitelné komponenty, které mohou pracovat s jakýmkoli typem dat, aniž by ztratily informace o typu, což minimalizuje chyby při převodu typů při běhu.

Hlavní výhody:

  • Typová bezpečnost: Kompilátor kontroluje správnost použití typů ve všeobecných strukturách.
  • Zmenšení množství kódu: Jedna obecná třída nebo metoda může pracovat s mnoha typy.
  • Čitelnost kódu: Je jasné, s jakými typy komponent pracuje.
  • Zlepšení výkonu (v některých případech): Absence potřeby převodu typů při běhu může mírně zlepšit výkon.

Příklad (Java):

// Příklad obecné třídy
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Použití obecné třídy s různými typy
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Typová bezpečnost, není potřeba převod

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Typová bezpečnost, není potřeba převod

Příklad (Python - Type Hinting, přibližně k Generics):

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žití s type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Pomáhá nástrojům pro statickou analýzu

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Pomáhá nástrojům pro statickou analýzu