Sobes.tech
Junior

Jakiej zasady programowania pozwala na używanie generyków?

sobes.tech AI

Odpowiedź od AI

Polimorfizm podtypów.

Generyki w Swift implementują parametryczny polimorfizm, pozwalając na pisanie kodu, który może działać z różnymi typami bez ich wcześniejszej znajomości, ale wymagając, aby te typy spełniały określone ograniczenia (np. protokoły).

Przykład użycia generyków:

// Definicja funkcji generycznej, która przyjmuje dwa parametry tego samego typu T,
// gdzie typ T musi spełniać protokół Equatable.
func areEqual<T: Equatable>(_ a: T, _ b: T) -> Bool {
    return a == b
}

// Użycie funkcji generycznej z Int
let intResult = areEqual(5, 5) // true

// Użycie funkcji generycznej z String
let stringResult = areEqual("hello", "world") // false

Przykład struktury generycznej (stos):

// Definicja struktury generycznej "Stack", która może przechowywać elementy dowolnego typu T.
struct Stack<T> {
    private var elements: [T] = []

    mutating func push(_ element: T) {
        elements.append(element)
    }

    mutating func pop() -> T? {
        return elements.popLast()
    }
}

// Użycie struktury generycznej z Int
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
let poppedInt = intStack.pop() // 2

// Użycie struktury generycznej z String
var stringStack = Stack<String>()
stringStack.push("A")
stringStack.push("B")
let poppedString = stringStack.pop() // "B"

Zalety używania generyków:

  • Bezpieczeństwo typów: Kompilator sprawdza typy podczas kompilacji, zmniejszając ryzyko błędów w czasie działania.
  • Ponowne użycie kodu: Ten sam kod może działać z różnymi typami.
  • Wydajność: Nie ma potrzeby rzutowania typów w czasie działania.
  • Abstrakcja: Pozwalają na abstrakcję od konkretnych typów danych.