ΕΝΟΤΗΤΑ 11 – Εισαγωγή στα Functions στην JavaScript (Part 1)
Όπως συμβαίνει και με άλλες γλώσσες
προγραμματισμού, έτσι και στην JavaScript,
η χρήση των functions είναι
απαραίτητη προϋπόθεση για να αναπτύξουμε
επαγγελματικές εφαρμογές.
Στην JavaScript
όμως, η ανάγκη εκμάθησης
των functions γίνεται ακόμα
πιο αναγκαία, αφού η JavaScript
έχει πολλαπλές χρήσεις για τα
functions και δια μέσω αυτών
παρουσιάζει έναν ευέλικτο και ταυτόχρονα
δυναμικό τρόπο ανάπτυξης Web
εφαρμογών.
Ας
τα πάρουμε όμως τα πράγματα από την αρχή
και ας απαντήσουμε εξ αρχής το βασικό
ερώτημα που είναι: τι είναι ένα function.
Τα
functions μας επιτρέπουν να
ομαδοποιήσουμε πολλές γραμμές κώδικα
κάτω από ένα όνομα. Για την εκτέλεση
αυτής της ομάδας κώδικα, αρκεί να
καλέσουμε μόνο το όνομα που της έχουμε
ορίσει. Ας δούμε όμως ένα απλό παράδειγμα
για να μπούμε σιγά σιγά στο πνεύμα και
στην λογικής των functions.
Ας θεωρήσουμε ότι έχουμε το εξής πρόβλημα:
Θέλουμε να έχουμε την δυνατότητα να
καλούμε ένα function στο οποίο
περνώντας του 2 οποιουσδήποτε αριθμούς
σαν παραμέτρους, να μας επιστρέφει πίσω
το άθροισμα των δύο αριθμών. Η λύση αυτού
του απλού προβλήματος είναι η ακόλουθη:
Για να ορίσουμε ένα function
πρέπει πάνω από όλα να χρησιμοποιήσουμε
την λέξη κλειδί function. Αμέσως
μετά δίνουμε ένα όνομα στο function.
Στο συγκεκριμένο παράδειγμα το
όνομα του function είναι sum.
Αμέσως μετά το όνομα ακολουθούν
παρενθέσεις που, αν και εφόσον το απαιτεί
η λογική του κώδικα μας, μπορούμε να
ορίσουμε παραμέτρους (parameters).
Δεν υπάρχει όριο στον αριθμό των
παραμέτρων αρκεί να χωρίζονται μεταξύ
τους με κόμμα. Αφού λοιπόν ορίσουμε ο
όνομα και τις παραμέτρους, μέσα σε
άγκιστρα γράφουμε τον κώδικα που θα
εκτελεστεί εφόσον καλέσουμε την
συγκεκριμένη function. Στο
παράδειγμα μας, προσθέτουμε τις τιμές
που θα λάβουν οι δύο παράμετροι και
αναθέτουμε το αποτέλεσμα σε μια καινούργια
μεταβλητή. Τέλος, κάθε function
πάντα επιστρέφει πίσω στο πρόγραμμα
μια τιμή. Στο δικό μας παράδειγμα θα
είναι η τιμή της μεταβλητής c.
Εάν η function δεν επιστρέφει
κάποια τιμή τότε επιστρέφει undefined.
Από τον πιο πάνω κώδικα θα παρατηρήσετε
ότι το function επιστρέφει
μια μόνο τιμή. Εάν χρειάζεται να έχουμε
περισσότερες από μια τιμή να επιστρέφονται
από το function τότε θα πρέπει,
εσωτερικά μέσα στο κώδικα του function,
να αποθηκεύσουμε όλες τις τιμές σε
έναν array και να επιστρέψουμε
στο τέλος τον array.
Όπως
αναφέραμε στην αρχή της ενότητας,
υπάρχουν πολλοί τρόποι να δημιουργήσουμε
μια function γιατί κάθε ένας
από αυτούς τους τρόπους εξυπηρετεί έναν
συγκεκριμένο σκοπό. Τον τρόπο που μόλις
είδαμε, είναι ο βασικός τρόπος ορισμού
μιας function.
Αφού
λοιπόν ολοκληρώσουμε τον κώδικα του
function είμαστε έτοιμοι να
το καλέσουμε στο κώδικα μας. Για να
εκτελέσουμε μια function αυτό
που χρειάζεται μόνο να κάνουμε είναι
να καλέσουμε το όνομα της function
και μέσα στην παρένθεση να εισάγουμε
τους αριθμούς ή γενικότερα τα στοιχεία
που περιμένει. Στο κώδικα μας, καλούμε
την function sum, που έχουμε
ήδη ορίσει, περνώντας τους αριθμούς 3
και 8 σαν παραμέτρους. Το αποτέλεσμα της
function το αποθηκεύουμε σε
μια καινούργια μεταβλητή x
το οποίο μάλιστα το δείχνουμε και
στο browser.
Όταν
ορίζουμε μια function, μπορούμε
να καθορίσουμε εξ αρχής ποιες παραμέτρους
και πόσες θα περιμένει να δεχτεί για να
εκτελέσει τον κώδικα της. Φυσικά, όπως
ήδη έχουμε αναφέρει, ο ορισμός των
παραμέτρων είναι προαιρετικός. Αν όμως
υπάρχουν παράμετροι και εμείς δεν
εισάγουμε τιμές για όλες τις παραμέτρους
που έχουν οριστεί, τότε η JavaScript
θα ορίσει σαν undefined τις
παραμέτρους για τις οποίες δεν δώσαμε
τιμή. Στο πιο κάτω παράδειγμα το αποτέλεσμα
θα είναι NaN γιατί η function
προσπαθεί να προσθέσει to
3 με το undefined.
Αν τώρα, δώσουμε στην function
περισσότερες τιμές από ότι περιμένει,
τότε η JavaScript θα αγνοήσει
τις έξτρα τιμές που περάσαμε.
Μπορούμε επίσης να δημιουργούμε functions
που να δέχονται άγνωστο αριθμό
παραμέτρων. Αυτό είναι εφικτό με την
χρήση μιας ειδικής μεταβλητής που
ονομάζεται arguments και
δημιουργείται αυτόματα μέσα σε κάθε
function. Αν και η χρήση της
μεταβλητής arguments δεν είναι
προτεινόμενος προγραμματιστικά, ας
δούμε για τώρα πως λειτουργεί σαν λογική
και αργότερα θα το αντικαταστήσουμε με
διαφορετικό κώδικα.
Στο
πιο κάτω παράδειγμα, δείχνουμε για αρχή
πως λειτουργεί η μεταβλητή arguments.
Δημιουργούμε λοιπόν μια function
που απλά επιστρέφει όλες τις τιμές
που περιέχει η arguments και
αποθηκεύουμε αυτές τις τιμές σε μια
μεταβλητή x.
Ας βελτιώσουμε τώρα το απλό παράδειγμα
της πρόσθεσης των δύο αριθμών να
χρησιμοποιεί οποιοδήποτε αριθμό
παραμέτρων και αφού προσθέτει όλες τις
τιμές να μας επιστρέφει το τελικό
άθροισμα.
Για να μάθουμε τον ακριβή αριθμό των
παραμέτρων που περάστηκαν στην function,
καλούμε την length μέθοδο
στο arguments. Μην σας ξεγελάει
το length στο arguments.
To arguments δεν είναι array αλλά
αντικείμενο. Αλλά για αυτά είναι νωρίς
ακόμα να μιλήσουμε. Στην επόμενη ενότητα
θα δούμε πως μπορούμε να χρησιμοποιήσουμε
αρκετά καινούργια χαρακτηριστικά της
ES6 όπως default
values, rest parameters και destructuring
και να αποφύγουμε το arguments.
Μιχάλης
Κασάπογλου