Sobes.tech
Middle

Čo sú Generics a ako sa používajú v programovaní?

sobes.tech AI

Odpoveď od AI

Generik (obecné typy) — je možnosť písania kódu, ktorý môže pracovať s rôznymi typmi údajov, pričom zachováva typovú bezpečnosť počas kompilácie. Umožňujú vytvárať triedy, rozhrania a metódy, v ktorých je typ údajov určený pri ich použití, nie pri ich deklarácii.

Použitie generík zabezpečuje:

  • Typovú bezpečnosť: Kompilátor kontroluje zhodu typov, čo pomáha predísť chybám súvisiacim s nezlučiteľnosťou typov za behu.
  • Opakovateľné použitie kódu: Ten istý kód môže byť použitý na prácu s rôznymi typmi údajov bez duplikácie logiky.
  • Čitateľnosť kódu: Použitie konkrétnych typov namiesto univerzálneho Object zvyšuje prehľadnosť kódu.
  • Výkon: V niektorých jazykoch (napríklad Java) sú generiká implementované s vymazaním typov (type erasure), ale v iných (napríklad C#, C++) sa informácie o type zachovávajú za behu.

Príklady použitia:

  • Kolekcie: Vytváranie univerzálnych zoznamov, množín, map, ktoré môžu uchovávať prvky akéhokoľvek typu.
    // Vytvorenie zoznamu reťazcov
    List<String> stringList = new ArrayList<>();
    stringList.add("ahoj");
    // Chyba pri kompilácii, ak sa pokúsite pridať číslo
    // stringList.add(123);
    
  • Faktory: Vytváranie fabrík, ktoré môžu generovať objekty rôznych typov.
  • Metódy: Písanie metód, ktoré pracujú s univerzálnymi typmi údajov.
    // Obecná metóda výmeny hodnôt
    public static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }
    
  • Triedy: Vytváranie tried, ktoré sú univerzálne vzhľadom na typ ukladaných alebo spracovávaných údajov.
    // Obecná trieda Box
    class Box<T> {
        private T content;
    
        public void setContent(T content) {
            this.content = content;
        }
    
        public T getContent() {
            return content;
        }
    }
    

Porovnanie s použitím typu Object (v Java):

Funkcia Generiká Typ Object
Typová bezpečnosť Počas kompilácie Počas behu (cez pretypovanie)
Nutnosť pretypovania Nie Áno
Chyby Zistia sa na úrovni kompilácie Môžu vzniknúť za behu (ClassCastException)
Čitateľnosť Vysoká Nižšia (nie je jasné, aké typy sa očakávajú)

Celkovo sú generiká mocným nástrojom, ktorý umožňuje písať spoľahlivejší, čitateľnejší a znovupoužiteľný kód.