Sobes.tech
Middle

Таврҳои умумӣ (Generics) чист?

sobes.tech AI

Ҷавоб аз AI

Типҳои умумӣ имкон медиҳанд, ки синфҳо, интерфейсҳо ва усулҳоро бо истифода аз параметрҳои типӣ муайян кунанд. Ин қобилияти бештар, такрори истифода ва бехатарии типи кодиҳоро таъмин мекунад, ки имкон медиҳад бо намудҳои гуногуни маълумот кор кардан бидуни аз даст додани санҷиши статикӣ.

Афзалиятҳои асосӣ:

  • Бехатарии тип: Компилятор типҳоро дар марҳилаи компиляция санҷида, хатогиҳоро дар вақти иҷрои, ки бо номувофиқии типҳо алоқаманданд, пешгирӣ мекунад.
  • Такрори истифода: Як коди оддӣ метавонад бо намудҳои гуногуни маълумот истифода шавад, ки ин такрори кодиҳоро кам мекунад.
  • Кам кардани вақти иҷро: Дар баъзе забонҳо (масалан, C#) типҳои умумӣ бо назардошти намудҳои мушаххас татбиқ мешаванд, ки метавонад иҷрои онро нисбат ба истифодаи Object беҳтар созад.

Маслиҳатҳо барои истифода:

  • Ҷамъбандӣ: Листҳо, луғатҳо, маҷмӯъҳо, ки бо намудҳои унсурҳо параметргузорӣ шудаанд.
  • Усулҳо: Усулҳое, ки бо ҳар гуна намудҳои маълумот кор мекунанд, ки интерфейси муайянро иҷро мекунанд.
  • Синфҳо: Синфҳои-обгортка, фабрикҳо, ки бо намудҳои параметрӣ кор мекунанд.

Маслиҳат дар C#:

// Лист умумӣ
List<string> номҳо = new List<string>();
номҳо.Add("Alice");
номҳо.Add("Bob");

// Усул умумӣ
public T GetFirstElement<T>(List<T> list)
{
    if (list != null && list.Count > 0)
    {
        return list[0];
    }
    return default(T); // Вақте ки арзиши пешфарз барои навъи T
}

Маслиҳат дар Java:

// Лист умумӣ
List<String> номҳо = new ArrayList<>();
номҳо.add("Alice");
номҳо.add("Bob");

// Усул умумӣ
public <T> T getFirstElement(List<T> list) {
    if (list != null && !list.isEmpty()) {
        return list.get(0);
    }
    return null; // Вақте ки навъи истинодӣ
}

Маслиҳат дар Python (ҳиммат ба навъҳо):

from typing import List, TypeVar

T = TypeVar('T')

def get_first_element(data: List[T]) -> T | None:
    # Функсия метавонад бо ҳар як рӯйхат кор кунад ва унсурро баргардонад
    if data:
        return data[0]
    return None

номҳо: List[str] = ["Alice", "Bob"]
first_name = get_first_element(номҳо) # IDE мефаҳмад, ки first_name - str

Дар баъзе забонҳо (Java), типҳои умумӣ истифодаи "хомӯшӣ" (type erasure) мекунанд, ки дар он маълумоти дар бораи навъи параметр дар марҳилаи компиляция нест мешавад. Ин метавонад ба баъзе маҳдудиятҳо оварда расонад. Дар дигар забонҳо (C#, Go) маълумоти дар бораи навъ дар вақти иҷро нигоҳ дошта мешавад.

Типҳои умумӣ асосии восита барои навиштани коди тоза, бехатар ва такрори истифода мебошанд.