Sobes.tech
Middle

Ce sunt tipurile generice?

sobes.tech AI

Răspuns de la AI

Tipurile generice (Generics) permit definirea claselor, interfețelor și metodelor folosind parametri de tip. Acest lucru crește flexibilitatea, reutilizarea și siguranța tipurilor a codului, permițând lucrul cu diferite tipuri de date fără a pierde verificarea statică a tipurilor.

Avantaje cheie:

  • Siguranța tipurilor: Compilatorul verifică tipurile în timpul compilării, prevenind erorile la rulare legate de incompatibilitatea tipurilor.
  • Reutilizare: Același cod poate fi folosit cu diferite tipuri de date, reducând duplicarea codului.
  • Performanță: În unele limbaje (de exemplu, C#), tipurile generice sunt implementate ținând cont de un tip specific, ceea ce poate îmbunătăți performanța comparativ cu utilizarea Object.

Exemple de utilizare:

  • Colecții: Listări, dicționare, seturi parametrizate pe tipul elementelor.
  • Metode: Metode care lucrează cu orice tip de date care implementează o anumită interfață.
  • Clase: Clase wrapper, fabrici, care lucrează cu parametri de tip.

Exemplu în C#:

// Listă generică
List<string> nume = new List<string>();
nume.Add("Alice");
nume.Add("Bob");

// Metodă generică
public T ObținePrimulElement<T>(List<T> list)
{
    if (list != null && list.Count > 0)
    {
        return list[0];
    }
    return default(T); // Returnează valoarea implicită pentru tipul T
}

Exemplu în Java:

// Listă generică
List<String> nume = new ArrayList<>();
nume.add("Alice");
nume.add("Bob");

// Metodă generică
public <T> T obținePrimulElement(List<T> list) {
    if (list != null && !list.isEmpty()) {
        return list.get(0);
    }
    return null; // Returnează null pentru tipurile referențiale
}

Exemplu în Python (tip-hinting):

from typing import List, TypeVar

T = TypeVar('T')

def obținePrimulElement(date: List[T]) -> T | None:
    # Funcția poate lucra cu orice listă și returna un element din ea
    if date:
        return date[0]
    return None

nume: List[str] = ["Alice", "Bob"]
primul_nume = obținePrimulElement(nume) # IDE înțelege că primul_nume este str

În unele limbaje (Java), tipurile generice folosesc "erasure" (ștergere), unde informația despre tipul parametrului este eliminată în timpul compilării. Acest lucru poate duce la anumite limitări. În alte limbaje (C#, Go), informația despre tip este păstrată în timpul execuției.

Tipurile generice sunt un instrument fundamental pentru scrierea unui cod curat, sigur și reutilizabil.