ΚΕΦΑΛΑΙΟ 4 – EVENTS & ΔΙΑΔΙΚΑΣΙΕΣ

 

 

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 Διαδικασίες

 

          Όλος ο κώδικας στη Visual Basic είναι οργανωμένος σε διαδικασίες (procedures). Τα κομμάτια κώδικα που δημιουργούνται για την ανταπόκριση σε γεγονότα δεν είναι παρά μια υποκατηγορία διαδικασιών γνωστές σαν διαδικασίες γεγονότων (event procedures). Μπορούμε όμως να γράψουμε και δικές μας διαδικασίες που δεν θα αντιστοιχούν σε κάποιο γεγονός, αλλά θα καλούνται από άλλες διαδικασίες του προγράμματος.

          Η γενική μορφή σύνταξης μιας διαδικασίας στη Visual Basic είναι η εξής :

 

[STATIC][PRIVATE] SUB <όνομα> [(Λίστα παραμέτρων)]

[Δηλώσεις τοπικών μεταβλητών]

            εντολές

            [Exit Sub]

            εντολές

End SUB

 

Η κλήση μιας διαδικασίας γίνεται με την χρήση της εντολής Call:

 

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 Συναρτήσεις

 

          Η συνάρτηση (function) είναι ακριβώς σαν μια διαδικασία με τη διαφορά ότι επιστρέφει κάποια τιμή. Στο κεφάλαιο 3 είδαμε αρκετές από τις έτοιμες συναρτήσεις που παρέχει η Visual Basic. Μπορούμε να φτιάξουμε και δικές μας χρησιμοποιώντας την ακόλουθη σύνταξη:

 

[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 If

End function

 

Η κλήση Result=Paragontiko(5) θα επιστρέψει 120.