Sobes.tech
Middle

Ce sunt genericele?

sobes.tech AI

Răspuns de la AI

Generics (Tipuri Generice) — un mecanism care permite scrierea de clase, interfețe și metode care lucrează cu date de diferite tipuri, asigurând în același timp siguranța tipurilor în timpul compilării. Ele permit crearea de componente reutilizabile care pot lucra cu orice tip de date, fără a pierde informații despre tip, ceea ce minimizează erorile de conversie a tipurilor în timpul execuției.

Principalele avantaje:

  • Siguranța tipurilor: Compilatorul verifică utilizarea corectă a tipurilor în structurile generice.
  • Reducerea cantității de cod: O singură clasă sau metodă generică poate lucra cu multiple tipuri.
  • Citibilitatea codului: Este clar cu ce tipuri lucrează componenta.
  • Îmbunătățirea performanței (în unele cazuri): Lipsa necesității de conversii de tip în timpul execuției poate îmbunătăți ușor performanța.

Exemplu (Java):

// Exemplu de clasă generică
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Utilizarea clasei generice cu diferite tipuri
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Siguranță de tip, nu este nevoie de conversie

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Siguranță de tip, nu este nevoie de conversie

Exemplu (Python - Type Hinting, apropiat de 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

# Utilizare cu type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Ajută instrumentele de analiză statică

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Ajută instrumentele de analiză statică