Xbasic: Πως λειτουργούν οι συναρτήσεις
Description: This is issue 29 of Magaz, the Hellenic LinuxMagazine
Keywords: magaz hellenic greek hellas greece hellug linux magazine

Magaz, The Greek Linux Magazine
Τεύχος #29
Περιληπτικά Περιεχόμενα Αναλυτικά Περιεχόμενα Mirrors Links Πληροφορίες Συντάκτες Αναζήτηση Επικοινωνία
- Προηγούμενο Περιεχόμενα ### 3. Πως λειτουργούν οι συναρτήσεις Ένα πρόγραμμα Xbasic δεν εκτελεί τις εντολές που βρίσκονται σε μια συνάρτηση μέχρι η συνάρτηση να κληθεί από ένα άλλο μέρος του προγράμματος. Όταν η συνάρτηση κληθεί, τότε το πρόγραμμα στέλνει τις παραμέτρους (αν υπάρχουν) στην συνάρτηση. Η παράμετρος είναι κάποια μεταβλητή που περιέχει πληροφορία που είναι απαραίτητη για την εκτέλεση του κώδικα της συνάρτησης. Στην συνέχεια εκτελούνται οι εντολές που περιέχονται στην συνάρτηση εκτελώντας την επιθυμητή εργασία. Όταν τελειώσει η εκτέλεση του κώδικα της συνάρτησης η εκτέλεση συνεχίζεται στην αμέσως επόμενη εντολή μετά την κλήση της συνάρτησης. Οι συναρτήσεις μπορεί να επιστρέφουν κάποια τιμή στο πρόγραμμα που τις κάλεσε. ### 3.1 Συναρτήσεις και δομημένος προγραμματισμός Χρησιμοποιώντας τις συναρτήσεις δημιουργούμε ένα πρόγραμμα που είναι πολύ πιο εύκολο να αναπτυχθεί και να διορθωθεί εκ των υστέρων. Αυτός ο τρόπος συγγραφής προγράμματος ονομάζεται δομημένος προγραμματισμός. ### 3.2 Γιατί το να γράφουμε δομημένα με συναρτήσεις είναι σημαντικό; Είναι πολύ ευκολότερο να προγραμματίζουμε δομημένα γιατί αυτός ο τρόπος προγραμματισμού μας επιτρέπει να αντιμετωπίσουμε το περίπλοκα προβλήματα διαιρώντας τα σε πολλά απλά μικρά. Κάθε μικρό πρόβλημα αντιμετωπίζεται με την δική του συνάρτηση όπου οι μεταβλητές είναι απομονωμένες από το υπόλοιπα πρόγραμμα εκτός από τις παραμέτρους και την τιμή επιστροφής. Έτσι η επίλυση μικρών προβλημάτων ένα κάθε φορά μας επιτρέπει να αναπτύξουμε με μεγαλύτερη ευκολία την εφαρμογή μας. Είναι πολύ ευκολότερο να βρίσκουμε τα λάθη σε ένα δομημένο πρόγραμμα. Αν υπάρχει κάποιο λάθος, αυτό μπορεί να περιοριστεί στην αντίστοιχη συνάρτηση και να επιλυθεί. Δεν μπορούμε να το συγκρίνουμε με το πόσο επίπονο θα είναι να ψάχνουμε σε ένα κατεβατό από πολλές γραμμές κώδικα για να εντοπίσουμε το λάθος. Ένα πραγματικό πλεονέκτημα των συναρτήσεων είναι ότι αφού γράψουμε μια συνάρτηση για να λύσουμε ένα επιμέρους πρόβλημα τότε αυτή η συνάρτηση είναι διαθέσιμη να χρησιμοποιηθεί ξανά, είτε στο τρέχον πρόγραμμα που γράφουμε, είτε σε κάποιο άλλο μεταγενέστερο. Ακόμα και αν οι ανάγκες του επόμενου προγράμματος είναι λίγο διαφορετικές, είναι πιο απλό να αλλάξουμε λίγο τις εντολές μιας συνάρτησης, παρά να την ξαναγράψουμε από την αρχή. ### 3.3 Σχεδιάζοντας ένα δομημένο πρόγραμμα. Αν θέλετε να σχεδιάσετε ένα δομημένο πρόγραμμα πρέπει πρώτα να κάνετε ένα σχέδιο των λειτουργιών του προγράμματος. Αυτό πρέπει να γίνει πριν ακόμη αρχίζουμε να γράφουμε κάποια γραμμή κώδικα. Είναι ανάγκη να ορισθούν οι λειτουργίες του προγράμματος. Παρακάτω θα δούμε ένα παράδειγμα στησίματος ενός δομημένου προγράμματος. Ας πούμε λοιπό ότι ένα πρόγραμμα θα εκτελεί τις εργασίες: Εισαγωγή νέων ονομάτων και διευθύνσεων Διόρθωση των στοιχείων που ήδη υπάρχουν Ταξινόμηση στοιχείων κατά όνομα Εκτύπωση ετικετών Με αυτόν τον κατάλογο εργασιών μπορούμε τώρα να αναλύσουμε κάθε εργασία στις επιμέρους για να ξεκινήσουμε να γράφουμε τον κώδικα. Ας ξεκινήσουμε με το "Εισαγωγή νέων ονομάτων και διευθύνσεων" Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο Άνοιγμα πεδίων στην οθόνη για την καταχώρηση νέων στοιχείων Προσθήκη νέων στοιχείων στον κατάλογο των ονομάτων Φύλαξη όλου του καταλόγου Το "Διόρθωση των στοιχείων που ήδη υπάρχουν" αναλύεται σε: Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο Άνοιγμα πεδίων στην οθόνη για την διόρθωση των στοιχείων Φύλαξη όλου του καταλόγου Θα παρατηρήσατε ότι και στις δύο περιπτώσεις υπάρχουν δύο κοινές λειτουργίες, η "Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο" και η "Φύλαξη όλου του καταλόγου". Εδώ φαίνεται καθαρά η οικονομία χρόνου που μπορεί να έχουμε με την χρήση των συναρτήσεων. Θα γράψουμε δύο συναρτήσεις για αυτές τις δύο λειτουργίες και θα τις χρησιμοποιήσουμε την κάθε μια, δύο φορές μέσα στο πρόγραμμά μας. Αυτή η μέθοδος δίνει ιεραρχική δομή στον κώδικα του προγράμματός μας. Αν ακολουθήσουμε την μέθοδο της αντιμετώπισης ενός προβλήματος διαιρώντας το σε περισσότερα μικρότερα δημιουργούμε ευανάγνωστα και εύκολα στην διόρθωση προγράμματα. Έτσι θα δείτε πολλά προγράμματα Xbasic να έχουν ένα πολύ μικρό κομμάτι εκτελέσιμου κώδικα στην Entry(), και όλες οι λειτουργίες να γίνονται με συναρτήσεις. Αποφεύγετε να γράφετε μεγάλες συναρτήσεις γιατί χάνονται τα πλεονεκτήματα της χρήσης τους. Επίσης σε ομάδες προγραμματιστών που ο κάθε ένας έχει αναλάβει να γράψει κώδικα για διαφορετικό κομμάτι της εφαρμογής οι συναρτήσεις επιτρέπουν να μην γράφεται πολλές φορές (κάθε φορά από διαφορετικό προγραμματιστή) κώδικας, που εκτελεί την ίδια λειτουργία. Συνήθως η συνάρτηση γράφεται από έναν και είναι διαθέσιμη σε όλους. ### 3.4 Γράφοντας μια συνάρτηση Εδώ θα δούμε λίγο πιο αναλυτικά αυτά που είδαμε παραπάνω στο παράδειγμά μας. Το πρώτο βήμα για να γράψουμε μια συνάρτηση είναι να έχουμε αποφασίσει τι θα κάνει. Όταν ξέρουμε τι θέλουμε να κάνει η συνάρτηση, είναι σχετικά εύκολο να την γράψουμε. Στην πρώτη γραμμή της συνάρτησης, ορίζονται: Το όνομά της Ο τύπος της συνάρτησης Η λίστα παραμέτρων (αν χρειάζεται) Στο παράδειγμά μας, στην γραμμή 66 έχουμε: `FUNCTION SLONG cube (SLONG x)` Αναλύοντας αυτή την γραμμή έχουμε: Την εντολή `FUNCTION` που δηλώνει ότι ξεκινά από εδώ και πέρα κώδικας που ανήκει σε συνάρτηση και οι μεταβλητές που θα βρεθούν δεν έχουν σχέση με τυχόν ίδιου ονόματος σε άλλα σημεία του προγράμματος. Τον τύπο `SLONG` που σημαίνει ότι αυτή η συνάρτηση θα επιστρέψει τιμή τύπου `SLONG`. Ο τύπος της συνάρτησης μπορεί να είναι οποιοσδήποτε από τους τύπους μεταβλητών της Xbasic που έχουμε αναφέρει σε προηγούμενα άρθρα. Ετσι οι ορισμοί:
      FUNCTION STRING retstr  ..
      FUNCTION SSHORT test  .
ορίζουν συναρτήσεις τύπου `STRING` και `SSHORT` αντίστοιχα. Το όνομα της συνάρτησης που είναι το `cube`. Τα ονόματα των συναρτήσεων ακολουθούν του ίδιους κανόνες με τα ονόματα των μεταβλητών που έχουμε αναφέρει. Τις παραμέτρους της συνάρτησης. Πολλές συναρτήσεις χρησιμοποιούν παραμέτρους που οι τιμές τους είναι απαραίτητα στοιχεία για εκτελέσουν κάποιο υπολογισμό. Για κάθε παράμετρο που μεταφέρει κάποια τιμή στην συνάρτηση η λίστα παραμέτρων πρέπει να έχει έναν ορισμό. Αυτός ο ορισμός δηλώνει τον τύπο της μεταβλητής που φέρνει τα δεδομένα και ένα όνομα που με αυτό αντιστοιχείται η τιμή αυτή μέσα στην συνάρτηση. Στην cube έχουμε την λίστα παραμέτρων (`SLONG x`). Με αυτόν τον τρόπο δηλώνουμε ότι, όταν κληθεί αυτή η συνάρτηση, θα μας έρθει μια τιμή από το πρόγραμμα που την καλεί και από δώ και πέρα μέσα στην συνάρτηση αναφέρεται με το όνομα x. Στο παράδειγμά μας με την κλήση της συνάρτησης cube η τιμή της μεταβλητής inpu περνάει στην συνάρτηση, και από δω και πέρα η τιμή αυτή εκπροσωπείται από την μεταβλητή x. Για να δούμε ξεκάθαρα την ευκολία που μας παρέχει η χρήση των συναρτήσεων θα κάνουμε διαδοχική κλήση της ίδιας συνάρτησης με άλλες παραμέτρους κάθε φορά.
    FUNCTION Entry()
    SLONG num1
    SLONG num2
    SLONG z
    num1 = 8
    num2 = 10
    z = cube(num1)
    PRINT z
    z = cube(num2)
    PRINT z
    END FUNCTION
Αν αντικαταστήσουμε την Entry() στο παράδειγμά μας με τις παραπάνω γραμμές, τότε το αποτέλεσμα του προγράμματος στην κονσόλα θα δείξει: `512` `1000` Έτσι γράφοντας μια φορά την cube μπορούμε να έχουμε τον υπολογισμό του κύβου αριθμού με διαφορετικά δεδομένα κάθε φορά, και το αντίστοιχο αποτέλεσμα. ### 3.5 Το εσωτερικό της συνάρτησης Μπορούν να ορισθούν μεταβλητές στο εσωτερικό μιας συνάρτησης. Οι μεταβλητές αυτές ονομάζονται τοπικές. Ο όρος τοπικές σημαίνει ότι οι μεταβλητές αυτές ανήκουν στην συνάρτηση και δεν έχουν καμμία σχέση με μεταβλητές ίδιου ονόματος σε άλλα σημεία του προγράμματος. Εννοείται ότι ακολουθούνται οι κανόνες ονοματολογίας των μεταβλητών στην Xbasic. Συνοψίζοντας την χρήση των μεταβλητών στις συναρτήσεις της Xbasic έχουμε: Τοπικές μεταβλητές Ορίζονται στην συνάρτηση και δεν έχουν καμμία σχέση με άλλες μεταβλητές αλλού στο πρόγραμμα. Παράμετροι Αυτές οι μεταβλητές μεταφέρουν δεδομένα από το πρόγραμμα που τις καλεί, για να χρησιμοποιηθούν σε υπολογισμούς. Επιστρεφόμενη τιμή Για να μπορεί το πρόγραμμα που καλεί την συνάρτηση να πάρει ένα αποτέλεσμα του υπολογισμού της, πρέπει να ορισθεί μια τιμή επιστροφής. Αυτή ορίζεται είτε με την τοποθέτηση της μεταβλητής που περιέχει την επιστρεφόμενη τιμή δίπλα στην εντολή END FUNCTION μέσα σε παρένθεση, είτε με τοποθέτηση μέσα στην συνάρτηση μιας από τις δύο εντολές (RETURN ή EXIT FUNCTION) και δίπλα, σε παρένθεση, την μεταβλητή με την τιμή επιστροφής. ### 3.6 Ο κώδικας των συναρτήσεων. Συνήθως ο κώδικας των συναρτήσεων ακολουθεί τον κώδικα της συνάρτησης ENTRY () μέσα στο ίδιο αρχείο που περιέχεται όλο το πρόγραμμα. Σε πολύπλοκα προγράμματα όμως, όπου αρκετοί προγραμματιστές ασχολούνται με το ίδιο θέμα, είναι καλύτερα οι συναρτήσεις να μπαίνουν σε ξεχωριστό αρχείο ή και σε πολλά αρχεία ανάλογα με τις ανάγκες της εφαρμογής. Έτσι μπορεί να έχουμε σε ένα αρχείο όλες τις συναρτήσεις που έχουν σχέση με την αποθήκευση στον δίσκο, σε άλλο τα γραφικά, σε άλλο οι μαθηματικοί υπολογισμοί κλπ. Έτσι δημιουργούνται οι βιβλιοθήκες συναρτήσεων, όπου ο κάθε προγραμματιστής μπορεί να τις συντηρεί (διορθώνει, βελτιώνει) και αυτές να είναι διαθέσιμες σε όλους τους άλλους. Κλείνοντας το κεφάλαιο των συναρτήσεων θέλω να τονίσω ότι η διαφορά στον τρόπο προγραμματισμού με συναρτήσεις και χωρίς αυτές, είναι τόσο μεγάλη που πια σήμερα κανείς δεν γράφει προγράμματα που να μην έχουν συναρτήσεις. Όταν εγώ ξεκίνησα να γράφω, οι γλώσσες που χρησιμοποιούσα τότε, δεν είχαν την δυνατότητα δημιουργίας συναρτήσεων και πάρα πολλά λάθη είχαν εμφανισθεί λόγω της χρήσης ίδιων ονομάτων μεταβλητών σε διαφορετικά σημεία του προγράμματος. Η δε απομόνωση του σημείου του κώδικα που περιείχε το λάθος ήταν εξαιρετικά επίπονη. Με την χρήση συναρτήσεων ο χρόνος εντοπισμού των σφαλμάτων περιορίστηκε σε κάτω από τον μισό. Στην συνέχεια θα δούμε τις εντολές ελέγχου της ροής του προγράμματος στην Xbasic. Προηγούμενο Περιεχόμενα