Επιστροφή τιμής μεταβλητής

Όπως είδαμε στις προηγούμενες παραγράφους το κυρίως πρόγραμμα μπορεί να 
περάσει την τιμή μιάς μεταβλητής στη συνάρτηση που καλεί μέσω μιάς 
παραμέτρου. Ακόμη είδαμε οτι οι τοπικές μεταβλητές είναι γνωστές μόνο στις 
συναρτήσεις στα όρια των οποίων έχουν οριστεί, άρα δεν μπορούν να 
χρησιμεύσουν στην ανταλλαγή τιμών μεταξύ συναρτήσεων. Οι γενικές 
μεταβλητές είναι μέχρι στιγμής ο μόνος τρόπος γιά μιά συνάρτηση να 
τροποποιήσει την τιμή μιάς μεταβλητής και να γνωστοποιήσει αυτή την αλλαγή 
στο κυρίως πρόγραμμα και σε άλλες συναρτήσεις. Πράγματι, η μέθοδος των 
γενικών μεταβλητών είναι η παλαιότερη μέθοδος ανταλλαγής τιμών μεταξύ 
συναρτήσεων. Στις πρώτες γλώσσες προγραμματσιμού υπήρχαν μόνο γενικές 
μεταβλητές. 

Το πρόβλημα με τις γενικές μεταβλητές είναι οτι η τροποποίηση που επιφέρουν 
σε αυτές οι διάφορες συναρτήσεις δεν δηλώνεται καθαρά στον ορισμό της 
συνάρτησης. Ειδικά αν το πρόγραμμα έχει έναν μεγάλο αριθμό συναρτήσεων  
αλλαγές που συμβαίνουν σε γενικές μεταβλητές περνούν απαρατήρητες και 
δυσκολεύουν τη διαδικασία της διόρθωσης. Ο κανόνας είναι να κρατούμε όσο το 
δυνατό πιό τοπική την επεξεργασία, άρα και τις μεταβλητές, η δε ανταλλαγές 
αποτελεσμάτων μεταξύ συναρτήσεων νε γίνεται πάντοτε ρητά και όχι ως 
παρενέργεια. 

Ας δούμε το πρόγραμμα του αρχείου SQUARES.C. Η λειτουργία αυτού του 
προγράμματος είναι παρόμοια με αυτή του προηγούμενου με εξαίρεση τον 
υπολογισμό του αθροίσματος των τετραγώνων. Η βασική διαφορά βρίσκεται στον 
ορισμό της συνάρτησης squ που είναι αντίστοιχη της συνάρτησης square. Μετά 
τον υπολογισμό του τετραγώνου δεν προχωρούμε στην εκτύπωση του 
αποτελέσματος αλλά στην επιστροφή του στο κυρίως πρόγραμμα με τη χρήση της 
πρότασης return. Συγκεκριμένα η πρόταση return επιστρέφει στο κυρίως 
πρόγραμμα την τιμή της μεταβλητής που τοποθετείται ανάμεσα στις παρενθέσεις 
που ακολουθούν τη λέξη κλειδί return. 

Πώς γίνεται αυτή η επιστροφή; Δεν έχουμε παρά να κοιτάξουμε την πρόταση του 
κυρίως προγράμματαος που καλεί τη συνάρτηση squ. Διαπιστώνουμε οτι το 
κυρίως πρόγραμμα αποτελείται από δύο επαναλήψεις for οι οποίες βρίσκονται 
εκεί γιά να υποδείξουν δύο διαφορετικές χρήσεις της επιστρεφόμενης τιμής. Ας 
σταθούμς στη πρώτη πρόταση επανάληψης που είναι πιό καθαρή. Βλέπουμε οτι η 
πρόταση κλήσης της συνάρτησης έχει μετατραπεί σε έκφραση που έχει κάποια 
τιμή ως εξαγόμενο. Η τιμή αυτή, η οποία εκχωρείται στη μεταβλητή y, δεν είναι 
άλλη από την τιμή που καθορίζει η πρόταση return της συνάρτησης. Έτσι η 
πρώτη πρόταση επανάληψης εμφανίζει τα τετράγωνα των αριθμών από 1 έως 7.

Η δεύτερη πρόταση επανάληψης δείχνει μιά πιό πυκνή γραφή του ίδιου 
προγράμματος. Αφού η πρόταση  squ(x) είναι μιά έκφραση που έχει μιά τιμή, η 
τιμή αυτή μπορεί να τυπωθεί απ' ευθείας από τη printf χωρίς τη μεσολάβηση 
της εκχώρησης y = squ(x). Το αποτέλεσμα δίνεται παρακάτω

The square of 0 is 0
The square of 1 is 1
The square of 2 is 4
The square of 3 is 9
The square of 4 is 16
The square of 5 is 25
The square of 6 is 36
The square of 7 is 49
The value of 0 is 0
The value of 1 is 1
The value of 2 is 4
The value of 3 is 9
The value of 4 is 16
The value of 5 is 25
The value of 6 is 36
The value of 7 is 49

Επομένως η πρόταση return επιτρέπει σε μιά συνάρτηση να επιστρέψει μιά τιμή 
στο πρόγραμμα που την καλεί. Αυτό είναι μιά λύση αλλά σίγουρα όχι και πολυ 
ευέλικτη αφού πολύ συχνά μιά συνάρτηση μπορεί να τροποποιεί αρκετές 
μεταβλητές. Γιά να πετύχουμε κάτι τέτοιο πρέπει να χρησιμοποιήσουμε δείκτες ή 
πίνακες. 

Ένα τελευταίο σημείο που πρέπει να τονιστεί εναι οτι γιά να γίνει ορθή χρήση 
της τιμής που η συνάρτηση επιστρέφει πρέπει ο μεταφραστής να γνωρίζει τον 
τύπο της τιμής αυτής (ή αλλοιώς τον τύπο της συνάρτησης). Σε περίπτωση που 
αυτό δεν δηλώνεται ρητά ο τύπος θεωρείται οτι είναι ακέραιος, όπως στη 
συνάρτηση squ. Αμέσως θα δούμε πως δηλώνεται ο τύπος μιάς συνάρτησης.

Περιεχόμενα Κεφαλαίου