Late Binding και Option Strict


Με αφορμή αυτό το post σκέφτηκα να γράψω δύο πράγματα σχετικά με το late binding και το Option Strict, αυτά που συνήθως αγνοούν οι νέοι προγραμματιστές VB.NET.

Το late binding προέρχεται από τον κόσμο του COM, είναι κάτι που υπήρχε και στη VB, ωστόσο ας μην μπλέξουμε το COM και ας το δούμε λίγο πιο απλά το πράγμα. Στον παρακάτω κώδικα φαίνεται ένα παράδειγμα late binding.

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        AddHandler Button1.Click, AddressOf Button1_Click
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Debug.WriteLine(sender.text)
    End Sub

Στο Button1_Click χρησιμοποιούμε το text property στο sender object και με μια πρώτη ματιά φαίνεται να τρέχει σωστά. Σε υποψίες ότι κάτι δεν πάει καλά με αυτή τη γραμμή κώδικα θα πρέπει να μας βάλει το intellisense το οποίο μόλις γράψουμε "sender" και πατήσουμε "." δεν μας εμφανίζει στη λίστα το text property. Ουσιαστικά, εκείνη τη στιγμή λέμε στον compiler "Μην ανησυχείς που αυτό το sender πράγμα δεν έχει text property, όταν τρέξει το πρόγραμμα σου εγγυώμαι ότι ο τύπος του object θα έχει". Όπως αντιλαμβάνεστε, κάτι τέτοιο είναι αρκετά επικίνδυνο γιατί αν κατά το runtime το object δεν έχει τελικά text property θα πάρω ένα ωραιότατο System.MissingMemberException.

Στην C# δεν υπάρχει περίπτωση να γίνει κάτι τέτοιο, θα χτυπήσει η γραμμή κατά το compilation. Στη VB.NET υπάρχει το Option Strict On|Off που καθορίζει αν θα επιτρέπεται η συμπεριφορά που περιέγραψα (Option Strict Off) ή αν θα χτυπάει κατά το compilation (Option Strict On). Και έτσι ερχόμαστε σε έναν πολύ σημαντικό κανόνα. Αν ως προγραμματιστές θα πρέπει να ακολουθείτε έναν και μόνο κανόνα, αυτός είναι ο παρακάτω:

Πάντοτε προγραμματίζουμε με Option Strict On

Μπορούμε είτε να πάμε στα project properties, στα Compile Options και να ενεργοποιήσουμε το On για να ισχύει για όλο το project, είτε να το γράφουμε στη αρχή κάθε vb αρχείου. Προσωπικά προτιμώ το δεύτερο ώστε να το βλέπω, να το θυμάμαι και να είμαι σίγουρος ότι είναι On.

To Option Strict On αποτελεί πολύ καλή προγραμματιστική τακτική καθώς προστατεύει από ύπουλα bugs αφού επιβάλει πάντοτε να γίνεται explicit conversion. Για παράδειγμα, απαγορεύει το παρακάτω:

    Dim b As Double 
    Dim c As Integer

    c = b

Χμμμ…. Ωραία, γιατί όμως υπάρχει το Option Strict Off; To Option Strict Off οφείλεται στην "κληρονομιά" της Visual Basic 6. Εκεί, διευκόλυνε τον προγραμματισμό σε COM objects, ιδιαίτερα με εφαρμογές που χρησιμοποιούσαν το automation του MS Office. Έτσι λοιπόν χρειάστηκε και στη VB.NET λόγω του upgrade που θα έπρεπε να γίνει σε όλες αυτές τις εφαρμογές. Σήμερα – μέχρι το VSTO να γίνει mainstream – το Option Strict Off συνεχίζει να χρησιμεύει για εφαρμογές MS Office Automation, ιδιαίτερα με παλιότερες εκδόσεις του MS Office. Πέρα από αυτό όμως θα πρέπει μην χρησιμοποιείται καθώς μπορεί να οδηγήσει σε κώδικα που συντηρείται δύσκολα και επιτρέπει τη δημιουργία bugs.

Άρα λοιπόν, αν θέλουμε late binding θα πρέπει υποχρεωτικά να χρησιμοποιήσουμε Option Strict Off; Όχι, σε προσεχές post θα δούμε τον σωστό τρόπο για να γίνεται late binding ακόμα και με το Option On. Μέχρι τότε, happy coding!

Advertisements


Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s