Middle
Dasturlashda umumiylashtirishlar (Generics) nima?
sobes.tech AI
AIdan javob
Programma tillashlari (Generics) — bu dasturlash tillarida turli ma'lumot turlari bilan ishlaydigan komponentlar (sinflar, interfeyslar, metodlar/funksiyalar) yaratishga imkon beradigan mexanizm bo'lib, bu tur xavfsizligini yo'qotmasdan va turlarni konvertatsiya qilish (casting) qilmasdan amalga oshiriladi.
Genericsdan foydalanishning asosiy maqsadlari:
- Tur xavfsizligini oshirish: Kompilyator, dastur ishga tushirilishidan oldin, turlarni tekshiradi va xatolarni aniqlaydi.
- Kod o'qilishi va tushunarli bo'lishini yaxshilash: Komponent qaysi ma'lumot turlari bilan ishlayotganini aniq ko'rish mumkin.
- Kodning qayta ishlatilishini ta'minlash: Bir komponentni turli turlarda ishlash uchun yaratish mumkin, bu esa bir nechta versiyalar yozish o'rniga.
- Turlarni konvertatsiya qilish ehtiyojini kamaytirish: Aniq turlarni konvertatsiya qilishga ehtiyoj qolmaydi, bu kodni toza va kamroq xatolikka moyil qiladi
ClassCastException(bu qo'llaniladigan tillarda, masalan, Java).
Genericsdan foydalanish misollari:
- Kolleksiyalar: Ro'yxatlar (
List), to'plamlar (Set), xaritalar (Map) ma'lum bir turdagi elementlarni saqlay oladi, bu esa boshqa turdagi elementlar kiritilmasligini ta'minlaydi. - Metodlar/funksiyalar: Metod parametrlar bilan ishlash yoki umumiy turdagi qiymatni qaytarishi mumkin.
- Sinflar/interfeyslar: Umumiy ma'lumot tuzilmalari yoki xulq-atvor shablonlarini yaratish mumkin.
Java misoli:
// Generik Pair sinfi
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;
}
}
// Foydalanish
Pair<String, Integer> pair = new Pair<>("Hello", 123);
String str = pair.getFirst(); // Turlarni konvertatsiya qilish shart emas
int num = pair.getSecond(); // Turlarni konvertatsiya qilish shart emas
// Noto'g'ri Pair misoli
// Pair<String, Integer> wrongPair = new Pair<>(123, "Hello"); // Kompilyatsiya xatosi: turlar mos kelmaydi
C# misoli:
// Generik Pair sinfi
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;
}
}
// Foydalanish
var pair = new Pair<string, int>("Hello", 123);
string str = pair.First; // Turlarni konvertatsiya qilish shart emas
int num = pair.Second; // Turlarni konvertatsiya qilish shart emas
// Noto'g'ri Pair misoli
// var wrongPair = new Pair<string, int>(123, "Hello"); // Kompilyatsiya xatosi: turlar mos kelmaydi
TypeScript misoli:
// Generik funksiya - massivning birinchi elementini olish
function getFirstElement<T>(arr: T[]): T | undefined {
if (arr.length > 0) {
return arr[0];
}
return undefined;
}
// Foydalanish
let numbers: number[] = [1, 2, 3];
let firstNumber = getFirstElement(numbers); // firstNumber turi number
let words: string[] = ["a", "b", "c"];
let firstWord = getFirstElement(words); // firstWord turi string
// let mixedArray: (number | string)[] = [1, "a", 2];
// let firstMixed = getFirstElement(mixedArray); // firstMixed turi number | string
Shunday qilib, Generics kuchli vositadir, u yordamida moslashuvchan, tur xavfsiz va qayta foydalaniladigan kodlar yozish mumkin.