Nima umumiy turlar (Generics)?
sobes.tech AI
AIdan javob
Generyk turlar (Generics) sinflar, interfeyslar va metodlarni tip parametrlaridan foydalanib belgilash imkonini beradi. Bu kodning moslashuvchanligini, qayta ishlatilishini va tip xavfsizligini oshiradi, turli ma'lumot turlari bilan ishlashga imkon beradi, statik tip tekshiruvi yo'qotilmaydi.
Asosiy afzalliklar:
- Tip xavfsizligi: Kompilyator tiplarni kompilatsiya bosqichida tekshiradi va tip mos kelmaslik bilan bog'liq xatoliklarni oldini oladi.
- Qayta ishlatish: Bir xil kod turli ma'lumot turlari bilan ishlatilishi mumkin, bu kod takrorlanishini kamaytiradi.
- Ishlash tezligi: Ba'zi tillarda (masalan, C#) generyk turlar aniq bir turga moslashtirilgan bo'lib, bu
Objectdan foydalanishga qaraganda samaradorlikni oshirishi mumkin.
Foydalanish misollari:
- Kolleksiyalar: Element turlariga parametrlangan ro'yxatlar, lug'atlar, to'plamlar.
- Metodlar: Ma'lum bir interfeysni amalga oshiradigan har qanday ma'lumot turlari bilan ishlaydigan metodlar.
- Klasslar: Qoplamalar, fabrikalar, tip parametrlaridan foydalanadiganlar.
C# misoli:
// Generyik ro'yxat
List<string> nomlar = new List<string>();
nomlar.Add("Alice");
nomlar.Add("Bob");
// Generyik metod
public T BirinchiElementniOlish<T>(List<T> ro'yxat)
{
if (ro'yxat != null && ro'yxat.Count > 0)
{
return ro'yxat[0];
}
return default(T); // T tur uchun standart qiymatni qaytaradi
}
Java misoli:
// Generyik ro'yxat
List<String> nomlar = new ArrayList<>();
nomlar.add("Alice");
nomlar.add("Bob");
// Generyik metod
public <T> T BirinchiElementniOlish(List<T> ro'yxat) {
if (ro'yxat != null && !ro'yxat.isEmpty()) {
return ro'yxat.get(0);
}
return null; // Referens turlar uchun null
}
Python misoli (tip-hinting):
from typing import List, TypeVar
T = TypeVar('T')
def birinchi_elementni_olish(ma'lumotlar: List[T]) -> T | None:
# Funksiya har qanday ro'yxat bilan ishlay oladi va elementni qaytaradi
if ma'lumotlar:
return ma'lumotlar[0]
return None
nomlar: List[str] = ["Alice", "Bob"]
birinchi_nomi = birinchi_elementni_olish(nomlar) # IDE, bu str
Ba'zi tillarda (Java), generyk turlar "tipni yo'q qilish" (type erasure) usulidan foydalanadi, bu yerda parametr tipining ma'lumotlari kompilatsiya vaqtida olib tashlanadi. Bu ba'zi cheklovlarga olib kelishi mumkin. Boshqa tillarda (C#, Go), tip ma'lumotlari bajarilish vaqtida saqlanadi.
Generyk turlar toza, xavfsiz va qayta ishlatiladigan kod yozish uchun asosiy vositadir.