Sobes.tech
Middle

Τι είναι τα Generics και ποιος είναι ο σκοπός τους;

sobes.tech AI

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

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

Χρησιμοποιούνται για:

  1. Αυξημένη ασφάλεια τύπων (Type Safety): Ο μεταγλωττιστής ελέγχει τους τύπους δεδομένων κατά τη διάρκεια της μεταγλώττισης, αποτρέποντας σφάλματα που θα εμφανίζονταν μόνο κατά την εκτέλεση (Runtime Errors).

    // Παράδειγμα χωρίς Generics - πιθανό σφάλμα κατά την ανάκτηση
    List list = new ArrayList();
    list.add("string");
    list.add(123); // Μπορεί να προστεθεί οποιοσδήποτε τύπος
    String s = (String) list.get(1); // Σφάλμα ClassCastException κατά την εκτέλεση
    
  2. Επαναχρησιμοποίηση κώδικα (Code Reusability): Ο ίδιος κώδικας μπορεί να λειτουργεί με διαφορετικούς τύπους δεδομένων χωρίς να χρειάζεται να γράψετε ξεχωριστές εκδόσεις για κάθε τύπο.

    // Παράδειγμα με Generics - ασφαλής χρήση
    List<String> list = new ArrayList<>(); // Ορίσαμε τον τύπο String
    list.add("string");
    // list.add(123); // Ο μεταγλωττιστής θα δώσει σφάλμα - δεν επιτρέπεται η προσθήκη int
    String s = list.get(0); // Δεν απαιτείται μετατροπή τύπου
    
  3. Βελτιώσεις στην αναγνωσιμότητα του κώδικα: Η ρητή αναφορά των τύπων δεδομένων βοηθά στην κατανόηση με ποια δεδομένα εργάζεται ο κώδικας.

  4. Βελτιστοποιήσεις απόδοσης: Σε ορισμένες γλώσσες (π.χ., C#), οι γενικοί μπορούν να προσφέρουν καλύτερη απόδοση σε σύγκριση με τη χρήση βασικών τύπων (π.χ., Object), καθώς δεν απαιτείται συσκευασία/αποσυσκευασία (boxing/unboxing).

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

Χωρίς Generics Με Generics
Λειτουργεί με τύπους Object Λειτουργεί με συγκεκριμένους τύπους
Απαιτείται ρητή μετατροπή τύπων Δεν απαιτείται μετατροπή τύπων
Τα σφάλματα τύπων ανιχνεύονται κατά την εκτέλεση Τα σφάλματα τύπων ανιχνεύονται κατά τη μεταγλώττιση
Κώδικας λιγότερο αναγνώσιμος Πιο αναγνώσιμος κώδικας