Ο τύπος enumerate στη Visual Basic (enumeration ή enum) είναι ένας τύπος δεδομένων αποτελούμενος από σαφώς καθορισμένες ονομαστές τιμές, οι οποίες ονομάζονται elements, members, enumeral ή enumerators.
Ουσιαστικά τα ονόματα των enumerators είναι identifiers που συμπεριφέρονται ως σταθερές. Μία μεταβλητή που έχει καθοριστεί ως τέτοιου τύπου μπορεί να πάρει τιμές οποιουδήποτε από τους enumerators που περιλαμβάνει στη δήλωση του τύπου. Οι τιμές αυτές μπορεί να διαφέρουν μεταξύ τους, μπορούν να συγκριθούν και να εκχωρηθούν, χωρίς να καθορίζονται από τον προγραμματιστή ως κάποια ξεκάθαρη έκφραση αναπαράστασης δεσμευόμενης μνήμης από το σύστημα. Οι μεταγλωττιστές έχουν ο καθένας το δικό του τρόπο αναπαράστασης.
Σε κάποιες γλώσσες προγραμματισμού, η δήλωση ενός τύπου enumerate χρησιμοποιείται για να καθορίσει ταξινομημένη λίστα των μελών του. Σε άλλες, δεν υπάρχει καμία μορφή ταξινόμησης. Αναλόγως τον compiler, κάποιες φορές προκύπτει αναγκαστική ταξινόμηση των μελών, για παράδειγμα μέσω της διαδικασίας αναπαράστασής τους ως ακεραίων.
Ο τύπος enumerate στη Visual Basic: ορθή σύνταξη δήλωσης
Για τη δημιουργία ενός τύπου enumerate απαιτείται η χρήση της δεσμευμένης λέξης Enum στην περιοχή δηλώσεων μίας κλάσης ή ενός module. Η δήλωση του τύπου δεν μπορεί να πραγματοποιηθεί μέσα σε μέθοδο ή συνάρτηση. Για τον καθορισμό προσβασιμότητας του τύπου, αξιοποιούνται -ανάλογα με την επιθυμητή εμβέλεια- οι δεσμευμένες λέξεις Private, Protected, Friend ή Public.
Ο τύπος Enum έχει ένα όνομα, το λανθάνοντα τύπο του και ένα σύνολο πεδίων- μελών, καθένα από τα οποία αναπαριστά μία σταθερά. Το όνομα πρέπει να είναι έγκυρο πληρώντας τις προδιαγραφές έγκυρων ονομάτων (π.χ. να μην είναι δεσμευμένη λέξη, να μην ξεκινάει από αριθμό κλπ.). Ο λανθάνων τύπος μπορεί να είναι ένας εκ των ακέραιων τύπων που αναγκωρίζει η Visual Basic, δηλαδή Byte, Short, Long ή Integer.
Ο τελευταίος είναι ο προκαθορισμένος τύπος για αναπαράσταση του Enum στη μνήμη. Οι τύποι Enum δεν μπορούν να περιλαμβάνουν τιμές με υποδιαστολή (μη ακέραιες). Σε τέτοια περίπτωση, είτε προκύπτει σφάλμα στον compiler είτε οι τιμές μετατρέπονται αυτόματα σε ακέραια μορφή, αναλόγως τις ρυθμίσεις που έχουν τεθεί.
Ο τύπος enumerate στη Visual Basic: δήλωση και δημιουργία με παράδειγμα
Για τη δήλωση του τύπου αξιοποιούμε μία δεσμευμένη λέξη απόδοσης εμβέλειας, τη λέξη Enum και ένα έγκυρο όνομα το οποίο θα χρησιμοποιείται στο εξής για τη δήλωση μεταβλητών ανάλογου τύπου. Παρατίθεται ο κώδικας σε Visual Basic:
Private Enum myWeek myDay1 End Enum
Public Enum myMonth myFavouriteMonth End Enum
Εδώ δηλώθηκαν δύο τύποι Enum. Ο πρώτος με όνομα myWeek, είναι εμβέλειας Private και περιέχει ένα μέλος με όνομα myDay1. Ο δεύτερος με όνομα myMonth είναι εμβέλειας Public και περιέχει επίσης ένα μέλος με όνομα myFavouriteMonth. Παρατηρούμε ότι μετά από το τελευταίο μέλος κάθε τύπου, συντάσσουμε την έκφραση End Enum για να δηλώσουμε τον τερματισμό του block κώδικα της συγκεκριμένης δήλωσης.
Ο τύπος enumerate στη Visual Basic: δήλωση και εισαγωγή μελών
Για τη δήλωση των ονομάτων των σταθερών (μελών) του Enum, αρκεί να γράψουμε τα επιθυμητά έγκυρα ονόματα μέσα στο στο ίδιο block του κώδικα. Από τις προκαθορισμένες ρυθμίσεις της γλώσσας, η πρώτη σταθερά που δηλώνεται -εάν δεν τής εκχωρηθεί τιμή- αρχικοποιείται με την τιμή 0. Οι ακολουθούμενες σταθερές αρχικοποιούνται με τον επόμενο κατά σειρά ακέραιο αριθμό, δηλαδή 1, 2, 3 κ.ο.κ. Παρατίθεται ο κώδικας σε Visual Basic:
Public Enum myMonth myFavouriteMonth Jenuary February March April May June July August September October November December End Enum
Στο Enum που δηλώθηκε περιλαμβάνονται 13 μέλη, εκ των οποίων το μέλος με όνομα myFavouriteMonth περιέχει την τιμή 0. Όλα τα υπόλοιπα περιέχουν την αντίστοιχη ακέραια τιμή της σειράς των μηνών εντός ενός έτους. Για παράδειγμα το μέλος με όνομα August περιέχει την τιμή 8 by default. Παρατηρούμε ότι η λίστα των μελών ακολουθεί μία ταξινομημένη μορφή.
Ο τύπος enumerate στη Visual Basic: αρχικοποίηση τιμών των μελών
Για την εκχώρηση συγκεκριμένων τιμών στα μέλη ενός Enum, αρκεί να χρησιμοποιήσουμε τον τελεστή εκχώρησης = και αμέσως μετά την επιθυμητή τιμή. Οποιαδήποτε τιμή ακέραιου αριθμού μπορεί να χρησιμοποιηθεί για να αρχικοποιήσει κάποιο από τα μέλη.
Η ανάγκη για εκχώρηση συγκεκριμένης τιμής προκύπτει, όταν θέλουμε να συμπεριλάβουμε καταστάσεις σφάλματος ή συνθήκες για τερματισμό προγράμματος στο κυρίως πρόγραμμα. Στην περίπτωση που συντάσσαμε κώδικα για τον υπολογισμό μισθοδοσίας εργαζομένων μίας τράπεζας, θα ήταν καλή πρακτική να αρχικοποιήσουμε την ημέρα Κυριακή με την τιμή 0, ώστε η πρώτη μέρα της εβδομάδας να ήταν η Δευτέρα.
Η αλλαγή αυτή μπορεί να πραγματοποιηθεί μέσα στη δήλωση του Enum, χωρίς να χρειάζεται να αλλάξουμε τη σειρά δήλωσης των μελών μέσα στον κώδικα. Παρατίθεται ο κώδικας σε Visual Basic:
Public Enum myWeek Saturday Sunday = 0 Monday Tuesday Wednesday Thursday Friday End Enum
Στο παράδειγμα αυτό, το μέλος με όνομα Sunday αρχικοποιείται με την τιμή 0. Όλα τα επόμενα μέλη -εάν δεν αρχικοποιηθούν- λαμβάνουν τιμές με τον επόμενο κατά σειρά ακέραιο αριθμό, δηλαδή 1, 2, 3 κ.ο.κ. Το μέλος με όνομα Saturday αρχικοποιείται by default με την τιμή 0, καθώς βρίσκεται πρώτο κατά σειρά στη δήλωση του Enum. Η μορφή αυτή θα μπορούσε κάλλιστα να χρησιμοποιηθεί στην περίπτωση της τράπεζας, καθότι οι ημέρες Σάββατο και Κυριακή δεν ανήκουν στις εργάσιμες.