Sobes.tech
Middle

Генерикҳо чистанд ва чӣ гуна дар барномасозӣ истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Генерикҳо (обобщения) — ин имкониятест барои навиштани коди, ки метавонад бо намудҳои гуногуни маълумот кор кунад, дар ҳоле ки бехатарии намудро дар вақти компилятсия нигоҳ медорад. Онҳо имкон медиҳанд, ки синфҳо, интерфейсҳо ва методҳо эҷод кунанд, ки дар онҳо намуди маълумот дар вақти истифода муайян мешавад, на дар вақти эълон.

Истифодаи генерикҳо таъмин мекунад:

  • Бехатарии намуд: Компилятор мувофиқати намудҳоро санҷида, кӯмак мекунад, ки хатогиҳо, ки бо номувофиқии намудҳо дар вақти иҷро рӯй медиҳанд, пешгирӣ шаванд.
  • Истифодаи такрорӣ: Як ва ҳамон код метавонад барои кор бо намудҳои гуногуни маълумот истифода шавад, бе такрор кардани логика.
  • Фаҳмошавии коди: Истифодаи намудҳои мушаххас ба ҷои Object баланд бардоштани фаҳмошавии коди.
  • Кам кардани вақти иҷро: Дар баъзе забонҳо (масалан, Java) генерикҳо бо нобуд кардани намудҳо (type erasure) амал мекунанд, аммо дар дигарон (масалан, C#, C++) маълумот дар бораи намуд дар вақти иҷро нигоҳ дошта мешавад.

Маслиҳатҳо барои истифода:

  • Коллексияҳо: Эҷоди рӯйхатҳо, маҷмӯъҳо, харитҳо, ки метавонанд унсурҳоро аз ҳар намуд нигоҳ доранд.
    // Эҷоди рӯйхати сатрҳо
    List<String> stringList = new ArrayList<>();
    stringList.add("салом");
    // Хатогӣ дар вақти компилятсия, агар кӯшиш кунед, ки рақам илова кунед
    // stringList.add(123);
    
  • Фабрикаҳо: Эҷоди фабрикаҳо, ки метавонанд объектҳоро аз намудҳои гуногун истеҳсол кунанд.
  • Методҳо: Навиштани методҳо, ки бо намудҳои умумӣ кор мекунанд.
    // Метод умумӣ барои иваз кардани арзишҳо
    public static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }
    
  • Классҳо: Эҷоди классҳо, ки дар бораи намудҳои нигоҳдории ё коркарди маълумот умумӣ мебошанд.
    // Класс умумии Box
    class Box<T> {
        private T content;
    
        public void setContent(T content) {
            this.content = content;
        }
    
        public T getContent() {
            return content;
        }
    }
    

Мувофиқати истифодаи Object (дар Java):

Хусусият Генерикҳо Навъи Object
Бехатарии намуд Дар вақти компилятсия Дар вақти иҷро (бо истифода аз кастинг)
Зарурияти кастинг Не Бале
Хатогӣ Дар вақти компилятсия ошкор мешаванд Мумкин аст дар вақти иҷро (ClassCastException)
Фаҳмошавӣ Баланд Таҳминан паст (намедонанд, ки кадом намудҳо интизор мешаванд)

Ҳамагӣ, генерикҳо воситаи қавӣ мебошанд, ки имкон медиҳанд, ки код боэътимод, фаҳмошаванда ва такроршаванда нависанд.