4.1
Γλώσσες καθοδηγούμενες από γεγονότα
Η Visual Basic
διαφέρει από τις άλλες γλώσσες στον τόπο με τον οποίο πραγματοποιείται η διαδοχή
των εντολών που υπάρχουν στον κώδικά της. Σε άλλες γλώσσες – τις οποίες καλούμε
διαδικαστικές (procedural) - οι εντολές εκτελούνται διαδοχικά, η μία μετά την
άλλη, ή βρίσκονται μέσα σε καλά ορισμένες διαδικασίες και συναρτήσεις. Στις
διαδικαστικές γλώσσες η έμφαση δίνεται στη δομή του προγράμματος και στην
οργάνωση των διαδικασιών.
Αντίθετα, στις
καθοδηγούμενες από γεγονότα γλώσσες, ο κώδικας δεν εκτελείται από την αρχή
μέχρι το τέλος, αλλά περιμένει ανενεργός μέχρι να συμβεί κάποιο συγκεκριμένο γεγονός.
Κάθε γεγονός είναι μια ενέργεια του χρήστη ή οποιαδήποτε άλλη αλλαγή στην
κατάσταση του προγράμματος. Για κάθε γεγονός που συμβαίνει υπάρχει ένα κομμάτι
κώδικα που ανταποκρίνεται σ’ αυτό.
Τα γεγονότα είναι
συνδεδεμένα μα κάποιο αντικείμενο που χρησιμοποιεί η εφαρμογή. Στα παρακάτω
παραδείγματα παρουσιάζονται γεγονότα που αφορούν τη φόρμα, ένα command button κι ένα textbox :
Private Sub Form_Load()
'
Εδώ μπαίνουν οι εντολές που θέλουμε να εκτελεστούν
' όταν
ξεκινά η φόρμα
End Sub
Private Sub cmdExit_Click()
' Εδώ
μπαίνουν οι εντολές που θέλουμε να εκτελεστούν
' όταν
πατηθεί το κουμπί εντολής cmdExit
End Sub
Private Sub
txtNumber_Change()
'
Εδώ μπαίνουν οι εντολές που θέλουμε να εκτελεστούν
' όταν
αλλάζουν τα περιεχόμενα του πλαισίου κειμένου txtNumber
End Sub
4.2 Συνηθισμένα γεγονότα
Πώς μπορούμε να ξέρουμε ποια
γεγονότα μπορούμε να χρησιμοποιήσουμε στη Visual Basic
για κάθε αντικείμενο; Τα πιο συνηθισμένα γεγονότα είναι διαθέσιμα απλώς
κάνοντας διπλό κλικ με το ποντίκι πάνω σε κάθε αντικείμενο σε κατάσταση
σχεδίασης. Η visual Basic μας μεταφέρει στο παράθυρο
του κώδικα όπου η διαδικασία που αντιστοιχεί στο γεγονός είναι έτοιμη.
Παρ’ όλο που με αυτόν τον
τρόπο θα μπορέσουμε να διαλέξουμε τα γεγονότα που απαιτούνται στις περισσότερες
περιπτώσεις, μερικές φορές η εφαρμογή χρειάζεται πιο εξειδικευμένα γεγονότα. Τα
διαθέσιμα γεγονότα για κάθε αντικείμενο είναι πολλά και μπορούμε να τα
επιλέξουμε από το παράθυρο του κώδικα. Στο πάνω μέρος υπάρχουν δύο λίστες
επιλογής. Στην αριστερή μπορούμε να επιλέξουμε ένα από τα αντικείμενα που
υπάρχουν στην εφαρμογή μας και στη δεξιά θα εμφανιστούν τα διαθέσιμα για αυτόν
τον τύπο αντικειμένου γεγονότα, απ’ όπου μπορούμε να επιλέξουμε αυτό που
ταιριάζει σε αυτό που θέλουμε να κάνουμε.
4.3
Διαδικασίες
[STATIC][PRIVATE] SUB <όνομα> [(Λίστα παραμέτρων)]
[Δηλώσεις τοπικών
μεταβλητών]
εντολές
[Exit Sub]
εντολές
End SUB
Call <όνομα>[(Λίστα
παραμέτρων)]
Μερικές επεξηγήσεις :
-
Η λέξη Static είναι προαιρετική και έχει σαν αποτέλεσμα οι
τοπικές μεταβλητές να διατηρούν την τιμή τους ανάμεσα σε δύο κλήσεις της
διαδικασίας.
-
Η λέξη Private είναι προαιρετική και χρησιμοποιείται όταν θέλουμε
η διαδικασία να είναι ορατή μόνο στη συγκεκριμένη φόρμα και όχι σε ολόκληρη την
εφαρμογή.
-
Η λίστα των παραμέτρων περιλαμβάνει δηλώσεις των τύπων των παραμέτρων
που θα δέχεται η διαδικασία κατά την κλήση της καθώς και αν αυτές οι παράμετροι
θα περάσουν στην διαδικασία με αναφορά (by reference)
ή με τιμή (by val). Οι παράμετροι που περνάν
με αναφορά αλλάζουν τις τιμές των μεταβλητών που χρησιμοποιήθηκαν κατά την
κλήση της διαδικασίας.
-
Η δήλωση Exit Sub προκαλεί την (πρόωρη) έξοδο
από την διαδικασία.
-
Η δήλωση End Sub δηλώνει το φυσιολογικό
τέλος της διαδικασίας.
Παραδείγματα :
Sub PollaBeep(Nbeeps As integer)
Dim i As integer
For i = 1 to Nbeeps
Beep
Next i
End Sub
…
Call PollaBeep(12)
Private Sub Test(By val x As integer, y As Integer)
x = x + 1
y = y + 1
End Sub
…
x = 10
y = 10
Call Test(x,y)
Στο τελευταίο παράδειγμα,
μετά την κλήση της διαδικασίας Test, η τιμή της x έχει
μείνει 10 (προσέξτε τη δήλωση By val…) ενώ η τιμή της y έχει
γίνει 11.
4.4 Συναρτήσεις
[STATIC][PRIVATE] FUNCTION <όνομα> [(Λίστα παραμέτρων)] [As τύπος]
[Δηλώσεις τοπικών
μεταβλητών]
εντολές
όνομα=τιμή
[ExitFunction]
εντολές
όνομα=τιμή
End FUNCTION
Παράδειγμα
:
Private function MyMax(x As integer, y As
integer) As integer
If x>y then
MyMax
= x
Else
MyMax=y
End If
End function
…
Result=MyMax(10,15)
Η
μεταβλητή Result παίρνει την τιμή 15.
4.5
Αναδρομή
Αναδρομή ονομάζουμε τη
δυνατότητα που έχουν διαδικασίες και συναρτήσεις να περιέχουν στις εντολές τους
κλήσεις στον εαυτό τους. Οι αναδρομικές υπορουτίνες είναι χαρακτηριστικό των
περισσότερων γλωσσών προγραμματισμού και προσφέρουν σημαντική προγραμματιστική
δύναμη. Το κλασσικό παράδειγμα είναι αυτό του υπολογισμού του παραγοντικού ενός
αριθμού (θυμίζουμε ότι x!=x*(x-1)*…*3*2*1)
:
Private function
Paragontiko(x As integer) As integer
If x=1 then
Paragontiko=1
Else
Paragontiko=x*Paragontiko(x-1)
End function
Η
κλήση Result=Paragontiko(5) θα επιστρέψει 120.