Η συνάρτηση είναι ένα μπλοκ οργανωμένου, επαναχρησιμοποιήσιμου κώδικα που χρησιμοποιείται για να εκτελέσει κάποια ενέργεια. Υπάρχουν πολλοί τρόποι να ορίσεις συναρτήσεις στη JavaScript. Εδώ θα δούμε τις δηλώσεις συνάρτησης και τις εκφράσεις συνάρτησης. Άλλες δυνατότητες, όπως οι συναρτήσεις βέλους, θα καλυφθούν σε άλλα concept.
Ο τυπικός τρόπος να ορίσεις μια συνάρτηση στη JavaScript είναι η δήλωση συνάρτησης, που ονομάζεται επίσης ορισμός συνάρτησης ή εντολή συνάρτησης.
Αποτελείται από τη λέξη-κλειδί function, το όνομα της συνάρτησης και μια λίστα παραμέτρων χωρισμένων με κόμμα μέσα σε παρενθέσεις.
Ακολουθεί το σώμα της συνάρτησης (σύνολο εντολών που ορίζει τι κάνει η συνάρτηση) μέσα σε άγκιστρα.
function someName(param1, param2, param3) {
// ...
}
Στη JavaScript, καλείς μια συνάρτηση γράφοντας το όνομα της συνάρτησης και μετά παρενθέσεις που περιέχουν τα ορίσματα.
someName(arg1, arg2, arg3);
Όταν δουλεύεις με παραμέτρους μέσα στο σώμα της συνάρτησης, πρόσεξε τις πιθανές παρενέργειες.
Από προεπιλογή, όλες οι παράμετροι που ορίζονται στη δήλωση συνάρτησης είναι προαιρετικές στη JavaScript.
Αν δώσεις λιγότερα ορίσματα από όσες είναι οι παράμετροι, τα ορίσματα που λείπουν θα είναι undefined μέσα στη συνάρτηση, δες Null και Undefined.
Σε πολλές περιπτώσεις, έχει νόημα να ορίσεις μια πιο κατάλληλη προεπιλεγμένη τιμή από το undefined.
Αυτό μπορεί να γίνει ορίζοντας προεπιλεγμένες παραμέτρους απευθείας στον ορισμό της συνάρτησης.
function someName(param1 = defaultValue1, param2 = defaultValue2) {
// ...
}
return
Μια εντολή return τερματίζει την εκτέλεση της συνάρτησης και καθορίζει μια τιμή που θα επιστραφεί σε αυτόν που κάλεσε τη συνάρτηση. Μια συνάρτηση μπορεί να έχει πολλές εντολές return.
function checkNumber(num) {
if (num === 0) {
return 'You passed 0, please provide another number.';
}
return 'Thanks for passing such a nice number.';
}
Η τιμή επιστροφής μιας συνάρτησης μπορεί να αποθηκευτεί σε μια μεταβλητή.
function sum(x, y) {
return x + y;
}
const total = sum(5, 10);
// => 15
Το αποτέλεσμα μιας συνάρτησης που δεν επιστρέφει καμία τιμή με return ή δεν έχει εντολή return είναι undefined.
Δεν υπάρχουν έμμεσα return στη JavaScript.
function nakedReturn(a) {
a * 2;
return;
}
nakedReturn(1);
// => undefined
function noReturn(a) {
a * 2;
}
noReturn(1);
// => undefined
Στη JavaScript, μπορείς να επιστρέψεις μόνο μία ακριβώς τιμή. Αν θέλεις να περάσεις περισσότερες πληροφορίες, πρέπει πρώτα να τις συνδυάσεις σε μία οντότητα, συνήθως σε ένα αντικείμενο ή σε έναν πίνακα.
function divide(a, b) {
return {
quotient: Math.floor(a / b),
remainder: a % b,
};
}
Η δήλωση συνάρτησης είναι μια αυτόνομη εντολή. Αλλά μερικές φορές είναι χρήσιμο να ορίσεις μια συνάρτηση ως μέρος μιας άλλης έκφρασης, π.χ. σε μια ανάθεση, ως παράμετρο συνάρτησης (callback) ή ως τιμή σε ένα αντικείμενο. Αυτό μπορεί να γίνει με μια έκφραση συνάρτησης. Έχει την ίδια σύνταξη με μια δήλωση συνάρτησης, μόνο που το όνομα της συνάρτησης μπορεί να παραλειφθεί για να δημιουργηθεί μια ανώνυμη συνάρτηση.
const someFunction = function (param) {
// ...
};
someOtherFunction(function (param) {
// ...
});
const obj = {
someFunction: function (param) {
// ...
},
};
Σε αυτή την άσκηση, θα γράψεις λίγο ακόμα κώδικα που σχετίζεται με την προετοιμασία και το μαγείρεμα των υπέροχων λαζάνια σου από το αγαπημένο σου βιβλίο μαγειρικής.
Έχεις πέντε εργασίες. Η πρώτη σχετίζεται με το ίδιο το μαγείρεμα, ενώ οι άλλες τέσσερις αφορούν την τέλεια προετοιμασία.
Όταν έχεις λαζάνια στον φούρνο, θέλεις να ξέρεις αν μπορείς να τα βγάλεις κιόλας ή όχι. Για να σιγουρευτείς ότι τα λαζάνια δεν θα καούν στον φούρνο, συνήθως βάζεις ένα χρονόμετρο. Μερικές φορές όμως το ξεχνάς.
Γράψε μια συνάρτηση cookingStatus που δέχεται ως παράμετρο τον χρόνο που απομένει στο χρονόμετρο σε λεπτά.
Η συνάρτηση έχει τρία πιθανά αποτελέσματα.
0, θα πρέπει να επιστρέφει 'Lasagna is done.'.'Not done, please wait.'.'You forgot to set the timer.'.Το χρονόμετρο δε θα δείχνει ποτέ τιμή κάτω από το 0.
cookingStatus(12);
// => 'Not done, please wait.'
cookingStatus();
// => 'You forgot to set the timer.'
Για τα επόμενα λαζάνια που θα ετοιμάσεις, θέλεις να σιγουρευτείς ότι έχεις κρατήσει αρκετό χρόνο, ώστε να απολαύσεις το μαγείρεμα. Έχεις ήδη κάνει ένα σχέδιο με όλες τις στρώσεις που θα έχουν τα λαζάνια σου. Τώρα θέλεις να υπολογίσεις κατά προσέγγιση πόσο χρόνο θα πάρει η προετοιμασία με βάση αυτό.
Υλοποίησε μια συνάρτηση preparationTime που δέχεται έναν πίνακα με στρώσεις και τον μέσο χρόνο προετοιμασίας ανά στρώση σε λεπτά.
Η συνάρτηση θα πρέπει να επιστρέφει την εκτίμηση για τον συνολικό χρόνο προετοιμασίας με βάση τον αριθμό των στρώσεων.
Αν η συνάρτηση κληθεί χωρίς να δοθεί ο μέσος χρόνος προετοιμασίας, θα πρέπει να υποτεθεί ότι είναι 2 λεπτά.
const layers = ['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles'];
preparationTime(layers, 3);
// => 18
preparationTime(layers);
// => 12
Εκτός από τον χρόνο που κρατάς, θέλεις επίσης να σιγουρευτείς ότι έχεις αρκετή σάλτσα και ζυμαρικά για να μαγειρέψεις τα λαζάνια των ονείρων σου. Για κάθε στρώση ζυμαρικών στα λαζάνια σου, θα χρειαστείς 50 γραμμάρια ζυμαρικά. Για κάθε στρώση σάλτσας στα λαζάνια σου, θα χρειαστείς 0,2 λίτρα σάλτσα.
Όρισε τη συνάρτηση quantities που παίρνει ως παράμετρο έναν πίνακα με στρώσεις.
Στη συνέχεια, η συνάρτηση θα προσδιορίσει την ποσότητα των ζυμαρικών και της σάλτσας που χρειάζονται για το γεύμα σου.
Το αποτέλεσμα θα πρέπει να επιστραφεί ως αντικείμενο με κλειδιά noodles και sauce.
quantities(['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles']);
// => { noodles: 100, sauce: 0.4 }
Πριν από λίγο καιρό επισκέφτηκες έναν φίλο και έφαγες λαζάνια εκεί. Ήταν καταπληκτικά και είχαν κάτι το ξεχωριστό. Ο φίλος σου έστειλε τη λίστα με τα υλικά και σου είπε ότι το τελευταίο στοιχείο της λίστας είναι το "μυστικό συστατικό" που έκανε το γεύμα τόσο ξεχωριστό. Τώρα θέλεις να προσθέσεις κι εσύ αυτό το μυστικό συστατικό στη συνταγή σου.
Γράψε μια συνάρτηση addSecretIngredient που δέχεται ως παραμέτρους δύο πίνακες με υλικά.
Η πρώτη παράμετρος είναι η λίστα που σου έστειλε ο φίλος σου και η δεύτερη είναι η λίστα υλικών της δικής σου συνταγής.
Η συνάρτηση θα πρέπει να προσθέσει το τελευταίο στοιχείο της λίστας του φίλου σου στο τέλος της δικής σου λίστας.
Ο πίνακας που αντιπροσωπεύει τη συνταγή σου θα πρέπει να τροποποιηθεί απευθείας και η συνάρτηση δε θα πρέπει να επιστρέφει τίποτα.
Ωστόσο, το πρώτο όρισμα δε θα πρέπει να τροποποιηθεί.
const friendsList = ['noodles', 'sauce', 'mozzarella', 'kampot pepper'];
const myList = ['noodles', 'meat', 'sauce', 'mozzarella'];
addSecretIngredient(friendsList, myList);
// => undefined
console.log(myList);
// => ['noodles', 'meat', 'sauce', 'mozzarella', 'kampot pepper']
Οι ποσότητες που αναγράφονται στο βιβλίο μαγειρικής σου φτάνουν μόνο για δύο μερίδες λαζάνια. Επειδή την επόμενη φορά θέλεις να μαγειρέψεις για περισσότερα άτομα, θέλεις να υπολογίσεις τις ποσότητες για διαφορετικό αριθμό μερίδων.
Υλοποίησε μια συνάρτηση scaleRecipe που παίρνει δύο παραμέτρους.
Η συνάρτηση θα πρέπει να επιστρέφει ένα αντικείμενο συνταγής με τις ποσότητες που χρειάζονται για τον επιθυμητό αριθμό μερίδων. Θέλεις όμως να κρατήσεις την αρχική συνταγή. Αυτό σημαίνει ότι σε αυτή την εργασία το όρισμα της συνταγής δε θα πρέπει να τροποποιηθεί.
const recipe = {
noodles: 200,
sauce: 0.5,
mozzarella: 1,
meat: 100,
};
scaleRecipe(recipe, 4);
// =>
// {
// noodles: 400,
// sauce: 1,
// mozzarella: 2,
// meat: 200,
// };
console.log(recipe);
// =>
// {
// noodles: 200,
// sauce: 0.5,
// mozzarella: 1,
// meat: 100,
// };
Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.