Sobes.tech
Junior

Czym są generyki w programowaniu?

sobes.tech AI

Odpowiedź od AI

Generyki (Generics) to sposób na pisanie elastycznego, wielokrotnego użytku kodu, który działa z dowolnymi typami danych, zachowując bezpieczeństwo typów. Pozwalają odłożyć określenie konkretnego typu do momentu użycia.

Główne zalety:

  • Unikanie duplikacji kodu: Można napisać jeden algorytm/strukturę danych, działającą z różnymi typami.
  • Bezpieczeństwo typów: Kompilator sprawdza zgodność typów podczas kompilacji, zapobiegając błędom czasu wykonania związanym z nieprawidłowymi typami.
  • Bardziej wyrazisty kod: Wyraźniej pokazuje intencje programisty dotyczące typów danych.

Przykład użycia w Swift:

Ogólna struktura Stack:

struct Stack<Element> {
    // generyczny Element używany jako typ elementów tablicy
    private var items: [Element] = []

    // generyczny Element używany jako typ parametru
    mutating func push(_ item: Element) {
        items.append(item)
    }

    // generyczny Element używany jako typ zwracanego wyniku
    mutating func pop() -> Element {
        return items.removeLast()
    }
}

Użycie z łańcuchami:

var stringStack = Stack<String>()
stringStack.push("hello")
stringStack.push("world")
let lastString = stringStack.pop() // lastString ma typ String

Użycie z liczbami:

var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
let lastInt = intStack.pop() // lastInt ma typ Int

Bez generyków, trzeba by pisać osobne struktury dla Stack<String>, Stack<Int>, itd., lub używać mniej bezpiecznych podejść (np. Any).