Sobes.tech
Middle

Šta su generici?

sobes.tech АИ

Одговор од АИ

Generici (Opšti tipovi) — mehanizam koji omogućava pisanje klasa, interfejsa i metoda koji rade sa podacima različitih tipova, a istovremeno obezbeđuju sigurnost tipova tokom vremena kompilacije. Oni omogućavaju kreiranje komponenti koje se mogu ponovo koristiti, a koje mogu raditi sa bilo kojim tipom podataka, bez gubitka informacija o tipu, čime se minimiziraju greške pri konverziji tipova u toku izvršavanja.

Glavne prednosti:

  • Sigurnost tipova: Kompajler proverava ispravnost korišćenja tipova u generičkim strukturama.
  • Smanjenje količine koda: Jedna generička klasa ili metoda može raditi sa više tipova.
  • Čitljivost koda: Jasno je sa kojim tipovima komponenta radi.
  • Poboljšanje performansi (u nekim slučajevima): Nedostatak potrebe za konverzijom tipova tokom izvršavanja može malo poboljšati performanse.

Primer (Java):

// Primer generičke klase
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Korišćenje generičke klase sa različitim tipovima
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Sigurnost tipova, nije potrebna konverzija

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Sigurnost tipova, nije potrebna konverzija

Primer (Python - Type Hinting, približno generičkim tipovima):

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

# Korišćenje sa type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Pomaže alatima za statičku analizu

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Pomaže alatima za statičku analizu