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 күчтүү инструмент болуп саналат, ал ийкемдүү, типтик коопсуз жана кайра колдонулушу мүмкүн код түзүүгө жардам берет.