Sobes.tech
Middle

Программалоодо жалпы колдонмолор (Generics) эмне?

sobes.tech AI

AIден жооп

Генериктер (Generics) — бул программалоо тилдериндеги механизм, ал аркылуу компоненттерди (кластар, интерфейстер, методдор/функциялар) ар кандай маалымат түрлөрү менен иштете алат, анткени ал типтик коопсуздукту жоготпойт жана түрлөрдү түрмөдө (casting) өзгөртүүнү талап кылбайт.

Generics колдонуу негизги максаттары:

  • Типтик коопсуздукту жогорулатуу: Компилятор типтерди компиляция учурунда текшерет, каталарды алдын ала аныктайт.
  • Коддун окумдуулугун жакшыртуу: Компонент кайсы маалымат түрлөрү менен иштейт так көрүнөт.
  • Кодду кайра колдонуу: Бир компонент түзсө болот, ал ар кандай типтер менен иштей алат, бир нече версия жазуунун ордуна.
  • Типтерди түрмөдө өзгөртүүнү азайтуу: Ачык түрмөдө өзгөртүүнүн кереги жок, бул кодду таза жана катачылыктарга аз кабылган кылат ClassCastException (эгер колдонулса, мисалы, Javaда).

Generics колдонуу мисалдары:

  • Жыйымдар: Тизмелер (List), жыйнактар (Set), карталар (Map) белгилүү бир типтеги элементтерди сактай алат, бул коллекцияга башка типтеги элементтер кирбейт дегенди кепилдейт.
  • Методдор/функциялар: Метод параметрлер менен иштей алат же жалпы типтеги маанини кайтарат.
  • Класстар/интерфейстер: Жалпы маалымат структураларын же жүрүм-турум үлгүлөрүн түзүүгө болот.

Javaда мисал:

// Жалпы класс
public class Pair<T, U> {
    private T first;
    private U second;

    public Pair(T first, U second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public U getSecond() {
        return second;
    }
}

// Колдонуу
Pair<String, Integer> pair = new Pair<>("Hello", 123);
String str = pair.getFirst(); // Түрмөдө өзгөртүүнү талап кылбайт
int num = pair.getSecond(); // Түрмөдө өзгөртүүнү талап кылбайт

// Катуу туура келбеген
Pair<String, Integer> wrongPair = new Pair<>(123, "Hello"); // Компилятор катасы: туура келбеген типтер

C#да мисал:

// Жалпы класс
public class Pair<T, U> {
    public T First { get; set; }
    public U Second { get; set; }

    public Pair(T first, U second) {
        First = first;
        Second = second;
    }
}

// Колдонуу
var pair = new Pair<string, int>("Hello", 123);
string str = pair.First; // Түрмөдө өзгөртүүнү талап кылбайт
int num = pair.Second; // Түрмөдө өзгөртүүнү талап кылбайт

// Катуу туура келбеген
var wrongPair = new Pair<string, int>(123, "Hello"); // Компилятор катасы

TypeScriptте мисал:

// Жалпы функция биринчи элементти алуу үчүн
function getFirstElement<T>(arr: T[]): T | undefined {
    if (arr.length > 0) {
        return arr[0];
    }
    return undefined;
}

// Колдонуу
let numbers: number[] = [1, 2, 3];
let firstNumber = getFirstElement(numbers); // firstNumber типи `number`

let words: string[] = ["a", "b", "c"];
let firstWord = getFirstElement(words); // firstWord типи `string`

// let mixedArray: (number | string)[] = [1, "a", 2];
// let firstMixed = getFirstElement(mixedArray); // firstMixed типи `number | string`

Ошентип, Generics күчтүү инструмент болуп саналат, ал ийкемдүү, типтик коопсуз жана кайра колдонулушу мүмкүн код түзүүгө жардам берет.