Τι είναι ένα Enum στις Γλώσσες Προγραμματισμού;

click fraud protection

Σύντομη για απαρίθμηση, ένα enum μεταβλητού τύπου μπορεί να βρεθεί στο C (ANSI, όχι το πρωτότυπο K & R), C ++ και ΝΤΟ#. Η ιδέα είναι ότι αντί να χρησιμοποιήσετε ένα int για να αντιπροσωπεύει ένα σύνολο τιμών, χρησιμοποιείται ένας τύπος με ένα περιορισμένο σύνολο τιμών.

Για παράδειγμα, αν χρησιμοποιούμε τα χρώματα του ουράνιου τόξου, τα οποία είναι

  1. το κόκκινο
  2. Πορτοκάλι
  3. Κίτρινος
  4. Πράσινος
  5. Μπλε
  6. Ινδικό
  7. Βιολέτα

Εάν δεν υπήρχαν τα enums, μπορείτε να χρησιμοποιήσετε το a #καθορίζω (σε C) ή const στο C ++ / C # για να καθορίσετε αυτές τις τιμές. Π.χ

Πάρα πολλά Ints στη μέτρηση!

Το πρόβλημα με αυτό είναι ότι υπάρχουν πολλά άλλα ints από τα χρώματα. Εάν η βιολετί έχει την τιμή 7, και το πρόγραμμα αποδίδει μια τιμή 15 σε μια μεταβλητή, τότε είναι σαφώς ένα σφάλμα, αλλά μπορεί να μην εντοπιστεί, καθώς το 15 είναι μια έγκυρη τιμή για ένα int.

Σκοπεύει στη διάσωση

Ένα enum είναι ένας τύπος καθορισμένος από το χρήστη που αποτελείται από ένα σύνολο ονομάτων που ονομάζονται απαριθμητές. Τα χρώματα του ουράνιου τόξου θα χαρτογραφηθούν όπως παρακάτω:

instagram viewer

Τώρα εσωτερικά, ο μεταγλωττιστής θα χρησιμοποιήσει ένα int για να τις κρατήσει και αν δεν παρέχονται τιμές, το κόκκινο θα είναι 0, το πορτοκαλί είναι 1 κτλ.

Το θέμα είναι αυτό rainbowcolors είναι ένας τύπος και μόνο άλλες μεταβλητές του ίδιου τύπου μπορούν να αντιστοιχιστούν σε αυτό. Το C είναι πιο εύκολο (δηλαδή λιγότερο πληκτρολογημένο), αλλά οι C ++ και C # δεν επιτρέπουν την ανάθεση εκτός αν τον πιέζετε χρησιμοποιώντας ένα cast.

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

Έχοντας το μπλε και το indigo με την ίδια τιμή δεν είναι λάθος, καθώς οι απαριθμητές μπορεί να περιλαμβάνουν συνώνυμα όπως κόκκινο και πορφυρό.

Γλωσσικές διαφορές

Στο Γ, το μεταβλητός πρέπει να προηγηθεί η δήλωση enum όπως λέμε

Σε C ++, όμως, δεν χρειάζεται ως rainbowcolors είναι ένας ξεχωριστός τύπος που δεν χρειάζεται το πρόθεμα τύπου enum.

Στο C # οι τιμές προσεγγίζονται με το όνομα του τύπου όπως στο

Ποιο είναι το σημείο των Enums;

Χρησιμοποιώντας τα enums αυξάνεται το επίπεδο της αφαίρεσης και επιτρέπει στον προγραμματιστή να σκεφτεί τι σημαίνουν οι αξίες παρά να ανησυχεί για τον τρόπο με τον οποίο αποθηκεύονται και προσπελαίνονται. Αυτό μειώνει την εμφάνιση των σφαλμάτων.

Ακολουθεί ένα παράδειγμα. Έχουμε ένα σύνολο φανάρια με τρεις λαμπτήρες - το κόκκινο, κίτρινος και πράσινος. Στο Ηνωμένο Βασίλειο, η ακολουθία των φανών κυκλοφορίας αλλάζει σε αυτές τις τέσσερις φάσεις.

  1. το κόκκινο - Η κυκλοφορία σταμάτησε.
  2. Και τα δυο το κόκκινο και Κίτρινος - Η κυκλοφορία εξακολουθεί να σταματά, αλλά τα φώτα πρόκειται να αλλάξουν σε πράσινο.
  3. Πράσινος - Η κυκλοφορία μπορεί να κινηθεί.
  4. Κίτρινος - Προειδοποίηση για επικείμενη αλλαγή στο κόκκινο.

Παράδειγμα φωτός της κυκλοφορίας

Τα φώτα ελέγχονται γράφοντας στα κάτω τρία κομμάτια ενός byte ελέγχου. Αυτά είναι σχεδιασμένα ως ένα bit pattern παρακάτω στο δυαδικό, όπου RYG αντιπροσωπεύουν τα τρία bits. Εάν το R είναι 1, ανάβει το κόκκινο φως.

Σε αυτή την περίπτωση, είναι εύκολο να δείτε ότι οι τέσσερις παραπάνω καταστάσεις αντιστοιχούν στις τιμές 4 = το κόκκινο on, 6 = το κόκκινο + Κίτρινος και τα δύο, 1 = Πράσινος και 2 = Κίτρινος επί.

Με αυτή τη λειτουργία

Χρησιμοποιώντας μια κλάση αντί των Enums

Σε C + + και C # θα χρειαζόταν να δημιουργήσουμε μια τάξη και στη συνέχεια παραφορτώνω ο χειριστής | να επιτρέπεις Ή -η των τύπων φανάρια.

Χρησιμοποιώντας τα enums εμποδίζουμε τα προβλήματα με άλλα bits να αντιστοιχίζονται στο byte ελέγχου βολβών. Ίσως ορισμένα από τα άλλα bits να ελέγχουν τον αυτοέλεγχο ή έναν διακόπτη "Green Lane". Στην περίπτωση αυτή, ένα σφάλμα που επιτρέπει σε αυτά τα bits να τεθούν σε κανονική χρήση θα μπορούσε να προκαλέσει τον όλεθρο.

Για να είμαστε σίγουροι, θα έπρεπε να καλύψουμε τα bits στο SetTrafficlights ()λειτουργία οπότε ανεξάρτητα από την αξία που περνάει, αλλάζουν μόνο τα τρία bits.

συμπέρασμα

Enums έχουν αυτά τα οφέλη:

  • Περιορίζουν τις τιμές που μπορεί να λάβει η μεταβλητή enum.
  • Σας αναγκάζουν να σκεφτείτε όλες τις πιθανές αξίες που μπορεί να πάρει το enum.
  • Είναι μια σταθερά και όχι ένας αριθμός, αυξάνοντας την αναγνωσιμότητα του πηγαίου κώδικα
instagram story viewer