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.