Διαδρομές
/
JavaScript
JavaScript
/
Ασκήσεις
/
Συλλέκτης Φρούτων
Συλλέκτης Φρούτων

Συλλέκτης Φρούτων

Άσκηση εκμάθησης

Εισαγωγή

Συναρτήσεις callback

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

const squareLength = 5;

// Caller function takes a callback function
function applyToSquare(callback) {
  return callback(squareLength);
}

// Callback must expect the possible argument from the calling function
function areaOfSquare(number) {
  return number * number;
}

applyToSquare(areaOfSquare); // => 25

Μπορείς επίσης να γράψεις callbacks ως έκφραση συνάρτησης, ως ανώνυμη έκφραση συνάρτησης ή ως έκφραση συνάρτησης βέλους:

applyToSquare(function squarePerimeter(side) {
  return side * 4;
});

applyToSquare(function (side) {
  return side * 4;
});

applyToSquare((side) => {
  return side * 4;
});

Οδηγίες

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

1. Ειδοποίησε τον πελάτη σου όταν η παραγγελία του ήταν επιτυχής

Η πύλη θα πρέπει να ειδοποιεί τον πελάτη σου αν η παραγγελία του ήταν επιτυχής. Όρισε τη συνάρτηση callback onSuccess που θα καλείται αν η παραγγελία ήταν επιτυχής επειδή ο μπακάλης είχε αρκετά φρούτα σε απόθεμα. Αυτή η συνάρτηση θα πρέπει να καλεί την εισαγόμενη συνάρτηση notify, περνώντας { message: 'SUCCESS' } για να ενημερώσεις τον πελάτη σου ότι η παραγγελία του ήταν επιτυχής.

onSuccess();
// => `notify` called with `{ message: 'SUCCESS' }`

2. Ειδοποίησε τον πελάτη σου όταν η παραγγελία του ήταν ανεπιτυχής

Η πύλη θα πρέπει να ειδοποιεί τον πελάτη σου αν η παραγγελία του ήταν ανεπιτυχής. Όρισε τη συνάρτηση callback onError που θα καλείται αν η παραγγελία ήταν ανεπιτυχής επειδή ο μπακάλης δεν έχει το φρούτο σε απόθεμα ή υπήρξε σφάλμα. Αυτή η συνάρτηση θα πρέπει να καλεί την εισαγόμενη συνάρτηση notify, περνώντας { message: 'ERROR' } για να ενημερώσεις τον πελάτη σου ότι η παραγγελία του ήταν ανεπιτυχής.

onError();
// => `notify` called with `{ message: 'ERROR' }`

3. Δημιούργησε έναν API wrapper για να τυλίξεις τη συνάρτηση παραγγελίας του API του μπακάλη

Οι παραγγελίες φρούτων γίνονται μέσω του API του μπακάλη με τη βοήθεια της παρεχόμενης συνάρτησης order. Αυτή η συνάρτηση δέχεται τρία ορίσματα: ένα ερώτημα, που περιέχει το variety και το quantity των φρούτων που ζητήθηκαν, μια συνάρτηση callback που καλείται όταν η παραγγελία είναι επιτυχής, και μια συνάρτηση callback που καλείται όταν η παραγγελία συναντήσει σφάλμα.

Θέλεις να προστατεύσεις τη βάση κώδικα σου από πιθανές εξωτερικές αλλαγές και αποφασίζεις να τυλίξεις την κλήση της συνάρτησης order μέσα σε μια νέα συνάρτηση με όνομα orderFromGrocer. Υλοποίησε τη συνάρτηση orderFromGrocer που προσπαθεί να κάνει μια παραγγελία μέσω κλήσης στη συνάρτηση order του API του μπακάλη, φροντίζοντας να προωθήσεις τα ορίσματα που περνούν στη orderFromGrocer στην κλήση του API.

Το ερώτημα έχει τη μορφή ενός αντικειμένου:

const query = {
  variety: string,
  quantity: number,
};
orderFromGrocer(
  { variety: 'pear', quantity: 12 },
  exampleSuccessCallback,
  exampleErrorCallback,
);
// => `order` was called with the query and the callbacks

4. Απλοποίησε τον χειρισμό των παραγγελιών που έχουν τοποθετηθεί

Οι πελάτες σου μπορούν πλέον να κάνουν παραγγελίες φρούτων μέσω της πύλης σου, ωστόσο παρατηρείς ότι καλείς τη συνάρτηση orderFromGrocer σε πολλά διαφορετικά σημεία της βάσης κώδικα σου, κάθε φορά περνώντας ένα query και τις δύο συναρτήσεις callback ως ορίσματα. Βλέποντας μια ευκαιρία να αναδιαμορφώσεις τον κώδικα σου, σκέφτεσαι ότι θα ήταν πιο απλό αν μπορούσες να κάνεις μια παραγγελία περνώντας απλώς το variety και το quantity των φρούτων που χρειάζονται. Όρισε τη βοηθητική συνάρτηση postOrder που δέχεται το variety και το quantity ως ορίσματα και προσπαθεί να κάνει μια παραγγελία στον μπακάλη.

postOrder('peach', 100);
// => order placed for 100 peaches
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
JavaScript Exercism

Έτοιμος να ξεκινήσεις την άσκηση Συλλέκτης Φρούτων;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.