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#:

// Класи умумии Pair
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 воситаи қавӣ барои сохтани коди чандир, бехатар ва такрорӣ мебошад.