Έχετε βρει ποτέ τον εαυτό σας γράφοντας τον ίδιο κώδικα ξανά και ξανά για να εκτελέσετε κάποια κοινή εργασία εντός του χειριστές συμβάντων? Ναί! Ήρθε η ώρα να μάθετε για τα προγράμματα μέσα σε ένα πρόγραμμα. Ας καλέσουμε αυτές τις υπορουτίνες των μίνι προγραμμάτων.
Εισαγωγή στις υπορουτίνες
Οι υπορουτίνες αποτελούν σημαντικό μέρος οποιουδήποτε γλώσσα προγραμματισμού, καιΔελφοί δεν αποτελεί εξαίρεση. Στους Δελφούς, υπάρχουν γενικά δύο τύποι υπορουτίνων: μια λειτουργία και μια διαδικασία. Η συνήθης διαφορά μεταξύ μιας λειτουργίας και μιας διαδικασίας είναι ότι μια συνάρτηση μπορεί να επιστρέψει μια τιμή και μια διαδικασία γενικά δεν θα το κάνει. Μια συνάρτηση καλείται κανονικά ως μέρος μιας έκφρασης.
Ρίξτε μια ματιά στα ακόλουθα παραδείγματα:
διαδικασία Πες γεια(const sWhat:σειρά); ξεκινήσει
ShowMessage ('Hello' + sWhat); τέλος; λειτουργία Χρονών(const BirthYear: ακέραιο): ακέραιο; var
Έτος, Μήνας, Ημέρα: Λόγος; ξεκινήσει
DecodeDate (ημερομηνία, έτος, μήνας, ημέρα); Αποτέλεσμα: = Έτος - Γέννηση Έτος; τέλος;
Αφού οριστούν οι υπορουτίνες, μπορούμε να τις ονομάσουμε μία ή περισσότερες φορές:
διαδικασία TForm1.Button1Κλικ (αποστολέας: TObject); ξεκινήσει
SayHello ("Χρήστης Delphi"); τέλος; διαδικασία TForm1.Button2Click (αποστολέας: TObject); ξεκινήσει
SayHello («Zarko Gajic») · ShowMessage ('Είστε' + IntToStr (YearsOld (1973)) + 'ετών!'); τέλος;
Λειτουργίες και διαδικασίες
Όπως μπορούμε να δούμε, τόσο οι λειτουργίες όσο και οι διαδικασίες λειτουργούν σαν μίνι προγράμματα. Συγκεκριμένα, μπορούν να έχουν τον δικό τους τύπο, σταθερές και μεταβλητές δηλώσεις μέσα τους.
Ρίξτε μια πιο προσεκτική ματιά σε μια (διαφορετική) λειτουργία SomeCalc:
λειτουργία SomeCalc. (const sStr: σειρά; const iYear, iMonth: ακέραιο; var iDay: ακέραιο): boolean; ξεκινήσει...τέλος;
Κάθε διαδικασία ή λειτουργία αρχίζει με a επί κεφαλής που προσδιορίζει τη διαδικασία ή τη λειτουργία και καταγράφει το Παράμετροι η χρήση ρουτίνας αν υπάρχει. Οι παράμετροι παρατίθενται σε παρενθέσεις. Κάθε παράμετρος έχει ένα αναγνωριστικό όνομα και συνήθως έχει έναν τύπο. Ένα ερωτηματικό διαχωρίζει τις παραμέτρους σε μια λίστα παραμέτρων μεταξύ τους.
sStr, iYear και iMonth καλούνται σταθερές παραμέτρους. Οι σταθερές παράμετροι δεν μπορούν να αλλάξουν από τη λειτουργία (ή τη διαδικασία). Το iDay περνά ως α var παράμετρος, και μπορούμε να κάνουμε αλλαγές σε αυτό, μέσα στην υπορουτίνα.
Οι λειτουργίες, επειδή επιστρέφουν τιμές, πρέπει να έχουν a επιστροφής που δηλώνεται στο τέλος της επικεφαλίδας. Η τιμή επιστροφής μιας συνάρτησης δίνεται από την (τελική) ανάθεση στο όνομά της. Δεδομένου ότι κάθε συνάρτηση έχει μια τοπική μεταβλητή Αποτέλεσμα του ίδιου τύπου με τις τιμές επιστροφής των λειτουργιών, η αντιστοίχιση στο αποτέλεσμα έχει το ίδιο αποτέλεσμα με την αντιστοίχιση με το όνομα της συνάρτησης.
Υποκατηγορίες θέσης και κλήσης
Οι υπορουτίνες τοποθετούνται πάντα στο τμήμα εφαρμογής της μονάδας. Τέτοιες υπορουτίνες μπορούν να καλούνται (χρησιμοποιούνται) από έναν χειριστή συμβάντων ή μια υπορουτίνα στην ίδια μονάδα που ορίζεται μετά από αυτό.
Σημείωση: η ρήτρα χρήσεων μιας μονάδας σας λέει ποιες μονάδες μπορεί να καλέσει. Αν θέλουμε μια συγκεκριμένη υπορουτίνα σε μια Μονάδα1 να είναι χρησιμοποιήσιμη από τους χειριστές συμβάντων ή τις υπορουτίνες μιας άλλης μονάδας (π.χ. Unit2), πρέπει:
- Προσθέστε τη Μονάδα1 στη ρήτρα χρήσης της Μονάδας2
- Τοποθετήστε ένα αντίγραφο της κεφαλίδας της υπορουτίνας στο τμήμα διεπαφής της μονάδας1.
Αυτό σημαίνει ότι οι υπορουτίνες των οποίων οι κεφαλίδες δίνονται στο τμήμα διεπαφής είναι παγκόσμιο πεδίο εφαρμογής.
Όταν καλούμε μια λειτουργία (ή μια διαδικασία) μέσα στη δική της μονάδα, χρησιμοποιούμε το όνομά της με οτιδήποτε άλλο Παράμετροι χρειάζονται. Από την άλλη πλευρά, αν ονομάσουμε μια γενική υπορουτίνα (που ορίζεται σε κάποια άλλη μονάδα, π.χ. MyUnit), χρησιμοποιούμε το όνομα της μονάδας που ακολουθείται από μια περίοδο.
... // Η διαδικασία SayHello ορίζεται μέσα σε αυτή τη μονάδα
SayHello ("Χρήστης Delphi"); // YearsOld λειτουργία ορίζεται στη μονάδα MyUnit
Dummy: = MyUnit. YearsOld (1973);...
Σημείωση: οι λειτουργίες ή οι διαδικασίες μπορούν να έχουν τις δικές τους υπορουτίνες ενσωματωμένες μέσα τους. Μια ενσωματωμένη υπορουτίνα είναι τοπική στην υπορουτίνα του κοντέινερ και δεν μπορεί να χρησιμοποιηθεί από άλλα μέρη του προγράμματος. Κάτι όπως:
διαδικασία TForm1.Button1Κλικ (αποστολέας: TObject); λειτουργία Είναι μικρό(const sStr:σειρά): boolean; ξεκινήσει// IsSmall επιστρέφει True αν το sStr είναι πεζά, αλλιώς αλλιώς
Αποτέλεσμα: = LowerCase (sStr) = sStr; τέλος; ξεκινήσει// Το IsSmall μπορεί να χρησιμοποιηθεί μόνο στο συμβάν Button1 OnClickαν IsSmall (Edit1.Text) έπειτα
ShowMessage ('Όλα τα μικρά καπάκια στο Edit1.Text')
αλλού
ShowMessage ('Δεν είναι όλα τα μικρά καπάκια στο Edit1.Text'); τέλος;