Εγώ έχω την εντύπωση πως όταν οι συγγραφείς έγραφαν το κεφάλαιο 10 είχαν στο νου τους περισσότερο την Basic. Η Basic υποστηρίζει "ασαφείς" κλήσεις, δηλαδή οι μεταβλητές περνιούνται αυτόματα με αναφορά, ενώ οι σταθερές και οι εκφράσεις αυτόματα με τιμή. Και αν κάποιος θέλει να περάσει μια μεταβλητή σε μια διαδικασία με τιμή, τότε κάνει την μεταβλητή έκφραση είτε βάζοντάς τη μέσα σε παρενθέσεις (α) είτε προσθέτοντας μηδέν κτλ.
Με αυτόν τον τρόπο γλυτώνεις τον κόπο των δηλώσεων var της Pascal, ή in, out, byval, byref κτλ άλλων γλωσσών.
Δυστυχώς η εξήγηση του περάσματος παραμέτρων "με αναφορά" είναι πιο δύσκολη απ' ότι "με αντιγραφή", γιατί στην πρώτη ουσιαστικά θα πρέπει να μιλήσεις για pointers. Υποθέτω ότι γι' αυτό περιγράψανε τον μηχανισμό με αντιγραφή: "...όταν εκτελεστεί η εντολή ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ, οι μεταβλητές της διαδικασίας δίνουν τις τιμές που περιέχουν στις αντίστοιχες μεταβλητές που περιλαμβάνονται στην κλήση της διαδικασίας...". Με μια γραμμή εξηγείται ο μηχανισμός.
Όμως η παραπάνω φράση δε νομίζω ότι από μόνη της απαγορεύει τη χρήση σταθερών ή εκφράσεων ως πραγματικές παραμέτρους. Το σημείο αυτό δεν αναφέρεται στο ΤΙ μπορούμε να περάσουμε σαν παράμετρο, απλά εξηγεί το μηχανισμό. Είναι λίγο τραβηγμένο και δικηγορίστικο να πούμε ότι αφού μιλάει για μεταβλητές, επιτρέπονται μόνο μεταβλητές. Αν υπονοούσαν κάτι τέτοιο θα το είχαν πιστεύω δηλώσει ρητά, όπως έκαναν σε άλλες περιπτώσεις (π.χ. στη σύγκριση μεταξύ λογικών εκφράσεων έχουν απαγορεύσει ρητώς τους τελεστές "μικρότερο από" και "μεγαλύτερο από").
Δυστυχώς τα παραδείγματα με υποπρογράμματα είναι λίγα και απλά, οπότε δε βρήκα άλλο αντιπαράδειγμα εκτός από τους πύργους του Ανόι (σελ. 106 τετραδίου μαθητή): [glossa]ΚΑΛΕΣΕ Μετακίνησε(Ν-1, ΣτύλοςΑ, ΣτύλοςΓ, ΣτύλοςΒ)[/glossa] Ο συγγραφέας σε εκείνο το σημείο θεώρησε προφανές ότι μπορεί να καλέσει μια διαδικασία χρησιμοποιώντας είτε σταθερά (οι στύλοι είναι δηλωμένοι ως ΣΤΑΘΕΡΕΣ) είτε
έκφραση (το Ν-1). Γιατί να μην το θεωρήσουμε κι εμείς προφανές;
Εξάλλου το βιβλίο στη σελίδα 209 αναφέρει ότι "...από τη στιγμή που θα έχει δημιουργηθεί (ένα υποπρόγραμμα), η χρήση του δεν διαφέρει από τη χρήση των ενσωματωμένων συναρτήσεων που παρέχει η γλώσσα προγραμματισμού, όπως για τον υπολογισμό του ημίτονου ή του συνημίτονου ή την εντολή με την οποία εκτελεί μία συγκεκριμένη διαδικασία, για παράδειγμα γράφει στην οθόνη (εντολή ΓΡΑΨΕ)". Αφού η χρήση τους δε διαφέρει, και επιτρέπεται να πούμε ΓΡΑΨΕ "Μήνυμα", γιατί να μην μπορούμε να πούμε και ΕΜΦΑΝΙΣΕ("Μήνυμα");
Το σημαντικότερο πάντως κατά τη γνώμη μου
δεν είναι το αν οι μαθητές μας θα χρησιμοποιήσουν ή όχι σταθερές ή εκφράσεις σαν παραμέτρους, μπορούμε να τους πούμε να μην το κάνουν και να είμαστε καλυμμένοι. Έτσι κι αλλιώς οι ασκήσεις είναι απλές και σπάνια θα σκεφτεί μαθητής που θα γράψει Ταξινόμησε(Α, 10).
Το σημαντικό είναι αν βρεθούμε στη θέση να
βαθμολογήσουμε κάποιον που χρησιμοποίησε σταθερά σαν παράμετρο, να μην του κόψουμε μονάδες, αφού υπάρχει σχετικό αντιπαράδειγμα στο σχολικό τετράδιο, ενώ δεν απαγορεύεται σαφώς από το βιβλίο.
Όσο για την πονηρή άσκηση που ανάφερες... να το πω ευγενικά... γι' αυτόν που θα βάλει τέτοια άσκηση δεδομένης της ασάφειας... χμ... κάτι με γιαούρτια και ντομάτες μου έρχεται!
