Sobes.tech
Middle

Nədir ümumi (Generics)?

sobes.tech Süni İntellekt

AI-dan cavab

Genetiklər (Ümumi Tiplər) — müxtəlif tiplərdəki məlumatlarla işləyən sinflər, interfeyslər və metodlar yazmağa imkan verən mexanizmdir və bu, tiplərin təhlükəsizliyini tərtib zamanı təmin edir. Onlar təkrar istifadə oluna bilən komponentlər yaratmağa imkan verir və hər hansı məlumat tipində işləyə bilər, tiplə bağlı məlumatı itirmədən, bu da icra zamanı tiplərin çevrilməsi xətalarını minimuma endirir.

Əsas üstünlüklər:

  • Tip təhlükəsizliyi: Kompilyator ümumi strukturlarda tiplərin düzgün istifadəsini yoxlayır.
  • Kodun miqdarını azaltmaq: Bir ümumi sinif və ya metod çox sayda tiplə işləyə bilər.
  • Kodun oxunaqlılığı: Komponentin hansı tiplərlə işlədiyi aydın görünür.
  • Performansın artırılması (bəzən): İcra zamanı tiplərin çevrilməsinə ehtiyac olmaması performansı bir qədər yaxşılaşdıra bilər.

Nümunə (Java):

// Ümumi sinif nümunəsi
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

// Müxtəlif tiplərlə ümumi sinifdən istifadə
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Tip təhlükəsizliyi, çevirməyə ehtiyac yoxdur

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Tip təhlükəsizliyi, çevirməyə ehtiyac yoxdur

Python (Type Hinting, Generics-ə yaxın nümunə):

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

# Type hinting ilə istifadə
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Statik analiz alətlərinə kömək edir

string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Statik analiz alətlərinə kömək edir