ΣΥΝΑΡΤΗΣΕΙΣ

- FUNCTIONS -

ΥΠΟΛΟΓΙΖΟΝΤΑΣ ΕΝΑ ΑΠΟΤΕΛΕΣΜΑ...

ΤΙ ΕΙΝΑΙ ΣΥΝΑΡΤΗΣΗ;

Συνάρτηση είναι ένας "μηχανισμός", ο οποίος δέχεται μία(*) ή περισσότερες εισόδους(inputs) και παράγει μια έξοδο(αποτέλεσμα-output) με βάση έναν κανόνα(rule).

(*)Τυπικά, υπάρχουν και συναρτήσεις χωρίς εισόδους.

ΠΑΡΑΔΕΙΓΜΑΤΑ
Συνάρτηση Κανόνας
√x
Παραδείγματα
Συνάρτηση Κανόνας
  1. Βάλε τα γράμματα της λέξης y σε μια λίστα
  2. Επέστρεψε το x-οστό στοιχείο της λίστας
Παραδείγματα
  • Η συνάρτηση είναι μια έννοια γνωστή από τα μαθηματικά.
  • Ο κανόνας μπορεί να εκφραστεί ως:
    1. μαθηματική παράσταση επί των μεταβλητών εισόδου(πχ √x).
    2. αλγόριθμος με δεδομένα τις εισόδους(βλέπε 2ο παράδειγμα).

Ο ΠΕΝΤΑΛΟΓΟΣ ΤΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

  1. Κάθε συνάρτηση θα πρέπει να παράγει ΑΚΡΙΒΩΣ ΕΝΑ ΑΠΟΤΕΛΕΣΜΑ(έδοδο).
  2. Οι ΙΔΙΕΣ ΕΙΣΟΔΟΙ πρέπει να δίνουν πάντα την ΙΔΙΑ ΕΞΟΔΟ(το αποτέλεσμα εξαρτάται μόνο από τις εισόδους).
  3. Ο αλγόριθμος μιας συνάρτησης,

  4. ΔΕΝ ΕΠΙΡΕΑΖΕΤΑΙ από την ΚΑΤΑΣΤΑΣΗ(state) του προγράμματος(τι έχει συμβεί μέχρι τότε).
  5. ΔΕΝ ΑΛΛΑΖΕΙ τις τιμές των υπόλοιπων ΜΕΤΑΒΛΗΤΩΝ του προγράμματος.
  6. Δεν δημιουργεί ΠΑΡΕΝΕΡΓΕΙΕΣ(υπολογίζει το αποτέλεσμα και τίποτα άλλο).
UC Berkeley:
"The Beauty and Joy of Computing"
Οι συναρτήσεις που πληρούν αυτούς τους κανόνες λέγονται "αγνές"(pure functions).

ΤΙ ΕΙΝΑΙ ΚΑΤΑΣΤΑΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ;

  • Οι τιμές των μεταβλητών, μαζί με ότι προβάλλεται στην οθόνη μια δεδομένη χρονική στιγμή.
  • Κάθε εντολή μεταβάλει την κατάσταση του προγράμματος.
  • Το αποτέλεσμα πολλών από τις εντολές μιας γλώσσας προγραμματισμού, επηρεάζεται από την κατάσταση του προγράμματος.
  • Ένας αλγόριθμος είναι η μετάβαση από τη μία κατάσταση στην άλλη, μέχρι να φτάσουμε σε μιά κατάσταση τερματισμού (halting state), που αντιστοιχεί στην τελευταία εντολή που εκτελείται. (Σημ. Ένας σωστός αλγόριθμος φτάνει πάντα σε κατάσταση τερματισμού, έχοντας πετύχει το στόχο του.)

ΤΙ ΕΙΝΑΙ ΚΑΤΑΣΤΑΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ;

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

ΕΝΤΟΛΕΣ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ

ΤΑ ΜΠΛΟΚ ΤΟΥ SNAP

ΕΝΤΟΛΕΣ

  • Δεν επιστρέφουν αποτελέσματα.
  • Ο υπολογιστής εκτελεί μια ενέργεια.
  • Μεταβάλεται η κατάσταση του προγράμματος.

ΑΝΑΦΟΡΕΙΣ

  • Επιστρέφουν μία τιμή.
  • Είναι ΣΥΝΑΡΤΗΣΕΙΣ, όχι πάντα αγνές.

ΚΑΤΗΓΟΡΗΜΑΤΑ

  • Είναι ΣΥΝΑΡΤΗΣΕΙΣ.
  • Επιστρέφουν boolean(Σωστό/Λάθος).

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ

Είναι το είδος της πληροφορίας ενός δεδομένου.

Οι τύποι δεδομένων που υποστηρίζει το Snap και οι περισσότερες γλώσσες προγραμματισμού.

ΠΕΔΙΟ ΟΡΙΣΜΟΥ-ΣΥΝΟΛΟ ΤΙΜΩΝ ΣΥΝΑΡΤΗΣΗΣ

Πεδίο ορισμού(domain) Σύνολο τιμών(range)
Οι τύποι δεδομένων των εισόδων Ο τύπος δεδομένων της εξόδου

Θετικός αριθμός

Θετικός αριθμός

Αλφαριθμητικό ή χαρακτήρας ή αριθμός

Θετικός αριθμός

Αλφαριθμητικά ή χαρακτήρες

Αλφαριθμητικό

Αριθμός και αλφαριθμητικό

Χαρακτήρας

ΣΥΝΘΕΣΗ ΣΥΝΑΡΤΗΣΕΩΝ

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

ΠΑΡΑΔΕΙΓΜΑΤΑ
UC Berkeley:
"The Beauty and Joy of Computing"

ΚΑΤΑΣΚΕΥΗ ΣΥΝΑΡΤΗΣΕΩΝ

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

Η εντολή αυτή ολοκληρώνει τον αλγόριθμο της συνάρτησης(είναι η τελευταία που εκτελείται).

Στο Snap αντιστοιχεί στο μπλοκ .

Στις περισσότερες "επαγγελματικές" γλώσσες προγραμματισμού είναι η εντολή return .

Οι συναρτήσεις αποτελούν μηχανισμούς αφαίρεσης που συνδέονται με τη γενίκευση.

ΕΡΩΤΗΣΗ

Τι θα επιστρέψει ως αποτέλεσμα η παρακάτω συνάρτηση αν η είσοδος ειναι το -2;

ΑΠΑΝΤΗΣΗ
Θα επιστρέψει 0, διότι θα εκτελεστεί η "δήλωσε" στο εσωτερικό της εντολής "αν".
Ο αλγόριθμος τερματίζει εκεί, χωρίς να εκτελεστεί η δεύτερη "δήλωσε".

ΠΑΡΑΔΕΙΓΜΑΤΑ ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΥΠΟΛΟΓΙΣΜΟΣ ΤΗΣ ΜΕΓΙΣΤΗΣ ΜΕΤΑΞΥ ΔΥΟ ΤΙΜΩΝ
  • Πεδίο ορισμού: Οποιοσδήποτε τύπος.
  • Σύνολο τιμών: Οποιοσδήποτε τύπος.

ΠΑΡΑΔΕΙΓΜΑΤΑ ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΥΠΟΤΕΙΝΟΥΣΑ ΟΡΘΟΓΩΝΙΟΥ ΤΡΙΓΩΝΟΥ
  • Είσοδοι: Τα μήκη των κάθετων πλευρών.
  • Πεδίο ορισμού: Θετικοί αριθμοί.
  • Σύνολο τιμών: Θετικός αριθμός.
  • Αλγόριθμος: Ελέγχονται οι τιμές εισόδου και εφαρμόζεται το Πυθαγόρειο θεώρημα.

ΠΑΡΑΔΕΙΓΜΑΤΑ ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΑΘΡΟΙΣΜΑ 1+2+...+Ν
  • Είσοδος: Το Ν.
  • Πεδίο ορισμού: Θετικός ακέραιος.
  • Σύνολο τιμών: Θετικός ακέραιος.
  • Αλγόριθμος: Το άθροισμα υπολογίζεται σε έναν αθροιστή("προσωρινό άθροισμα").
    Η μεταβλητή αυτή δεν επηρεάζει το υπόλοιπο πρόγραμμα, διότι είναι γνωστή μόνο στον αλγόριθμο της συνάρτησης.
    Οι μεταβλητές αυτές ονομάζονται τοπικές.

ΠΑΡΑΔΕΙΓΜΑΤΑ ΜΗ-ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΥΠΟΛΟΓΙΣΜΟΣ ΕΜΒΑΔΟΥ ΤΡΙΓΩΝΟΥ
Η συνάρτηση επιπλέον ζωγραφίζει το τετράγωνο, δημιουργώντας παρενέργειες στο πρόγραμμα και αλλάζοντας την κατάστασή του.(κανόνας 5)

ΠΑΡΑΔΕΙΓΜΑΤΑ ΜΗ-ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΑΠΟΣΤΑΣΗ ΤΗΣ ΤΡΕΧΟΥΣΑΣ ΜΟΡΦΗΣ ΑΠΟ ΣΗΜΕΊΟ
  • Είσοδοι: Οι συντεταγμένες (x,y) του σημείου.
  • Το αποτέλεσμα δεν εξαρτάται μόνο από την είσοδο αλλά και από τη θέση της μορφής. Έτσι:
    • Οι ίδιες είσοδοι μπορεί να οδηγήσουν σε ΔΙΑΦΟΡΕΤΙΚΟ αποτέλεσμα(κανόνας 2).
    • Επηρεάζεται από την προηγούμενη κατάσταση του προγράμματος(τις τιμές των μεταβλητών "x-θέση","y-θέση")(κανόνας 3).

ΠΑΡΑΔΕΙΓΜΑΤΑ ΜΗ-ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΕΜΒΑΔΟΝ ΤΕΤΡΑΓΩΝΟΥ
Η είσοδος της συνάρτησης δε δίνεται ως παράμετρος, αλλά διαβάζεται από το πληκτρολόγιο.
Ο αλγόριθμος δημιουργεί έτσι παρενέργειες στο πρόγραμμα(κανόνας 5).

ΠΑΡΑΔΕΙΓΜΑΤΑ ΜΗ-ΑΓΝΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

ΑΘΡΟΙΣΜΑ 1+2+...+Ν
Επιπλέον ο αλγόριθμος αλλάζει την τιμή της μεταβλητής "μέσος όρος".
Η μεταβλητή αυτή ανήκει στο υπόλοιπο πρόγραμμα και ονομάζεται καθολική.
Παραβιάζεται έτσι ο κανόνας 4.

ΕΡΩΤΗΣΗ

Μπορεί να δημιουργηθεί συνάρτηση που να υπολογίζει τη λύση της δευτεροβάθμιας εξισωσης αx2+βx+γ=0;

Η λύση της δευτεροβάθμιας εξίσωσης μπορεί να είναι δύο αριθμοί. Άρα παραβιάζεται ο κανόνας 1, που απαιτεί η συνάρτηση να παράγει μόνο ένα αποτέλεσμα(*).

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

(*) Σε επόμενη ενότητα θα γνωρίσεις τις λίστες που θα σου λύσουν αυτό το πρόβλημα.

ΕΠΑΚΟΛΟΥΘΑ

Στον κλασικό προγραμματισμό οι συναρτήσεις δεν χρησιμοποιούνται αυτόνομα, αλλά πάντα ως είσοδοι σε εντολές.
Ο συναρτησιακός προγραμματισμός(functional programming), χρησιμοποιεί μόνο συναρτήσεις και μάλιστα αγνές.
Λόγω των χαρακτηριστικών τους, οι αγνές συναρτήσεις επιστρέφουν πάντα το ίδιο αποτέλεσμα, ανεξαρτήτως υπολογιστή.
Αυτό καθιστά το συναρτησιακό προγραμματισμό, ιδανικό στη συγγραφή προγραμμάτων που εκτελούνται σε πολλούς υπολογιστές ταυτόχρονα(parallel programming).