Sobes.tech
Junior

Ποια αρχή προγραμματισμού επιτρέπει τη χρήση γενικών;

sobes.tech AI

Απάντηση από AI

Υποτύπος πολυμορφισμού.

Οι γενικοί τύποι (generics) στη Swift υλοποιούν τον παραμετρικό πολυμορφισμό, επιτρέποντας να γράφουμε κώδικα που μπορεί να λειτουργεί με διαφορετικούς τύπους χωρίς να τους γνωρίζουμε εκ των προτέρων, αλλά απαιτώντας αυτοί οι τύποι να πληρούν ορισμένους περιορισμούς (π.χ., πρωτόκολλα).

Παράδειγμα χρήσης γενικών:

// Ορισμός μιας γενικής συνάρτησης που δέχεται δύο παραμέτρους του ίδιου τύπου T,
// όπου ο τύπος T πρέπει να συμμορφώνεται με το πρωτόκολλο Equatable.
func areEqual<T: Equatable>(_ a: T, _ b: T) -> Bool {
    return a == b
}

// Χρήση της γενικής συνάρτησης με το τύπο Int
let intResult = areEqual(5, 5) // true

// Χρήση της γενικής συνάρτησης με το τύπο String
let stringResult = areEqual("hello", "world") // false

Παράδειγμα δομής γενικού τύπου (στοίβα):

// Ορισμός μιας δομής γενικού τύπου "Stack", που μπορεί να αποθηκεύει στοιχεία οποιουδήποτε τύπου T.
struct Stack<T> {
    private var elements: [T] = []

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

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

// Χρήση της δομής γενικού τύπου με το τύπο Int
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
let poppedInt = intStack.pop() // 2

// Χρήση της δομής γενικού τύπου με το τύπο String
var stringStack = Stack<String>()
stringStack.push("A")
stringStack.push("B")
let poppedString = stringStack.pop() // "B"

Πλεονεκτήματα της χρήσης γενικών:

  • Ασφάλεια τύπων: Ο μεταγλωττιστής ελέγχει τους τύπους κατά τη διάρκεια της μεταγλώττισης, μειώνοντας την πιθανότητα σφαλμάτων κατά την εκτέλεση.
  • Επανάχρηση κώδικα: Ο ίδιος κώδικας μπορεί να λειτουργεί με διαφορετικούς τύπους.
  • Απόδοση: Δεν απαιτείται μετατροπή τύπων κατά την εκτέλεση.
  • Αφαίρεση: Επιτρέπουν την αφαίρεση από συγκεκριμένους τύπους δεδομένων.