Τρόπος χρήσης μερικής εφαρμογής για τη βελτίωση του κώδικα JavaScript

Η χρήση αυτής της λειτουργικής τεχνικής μπορεί να κάνει τον κωδικό σας πιο κομψό

Ο λειτουργικός προγραμματισμός μας δίνει τεχνικές για την επίλυση προβλημάτων στον κώδικά μας. Ένα από αυτά, η μερική εφαρμογή, είναι λίγο δύσκολο να το καταλάβουμε, αλλά μπορεί να μας επιτρέψει να γράψουμε λιγότερα (ακούγεται ενδιαφέρον, σωστά;).

Τι είναι αυτό?

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

Ας δώσουμε κάποιο πλαίσιο σχετικά με το πότε θα μπορούσαμε να χρησιμοποιήσουμε μερική εφαρμογή:

const list = (lastJoin, ...items) => { const commaSeparated = items.slice(0,-1).join(", "); const lastItem = items.pop(); return `${commaSeparated} ${lastJoin} ${lastItem}`;}

Αυτή η μικρή συνάρτηση παίρνει μια λέξη lastJoinκαι έναν αυθαίρετο αριθμό items. Αρχικά, listδηλώνει μια commaSeparatedμεταβλητή. Αυτή η μεταβλητή αποθηκεύει έναν ενωμένο πίνακα διαχωρισμένων με κόμμα όλων των στοιχείων εκτός από το τελευταίο. Στην επόμενη γραμμή αποθηκεύουμε το τελευταίο στοιχείο itemsσε μια lastItemμεταβλητή. Στη συνέχεια, η συνάρτηση επιστρέφει χρησιμοποιώντας ένα πρότυπο συμβολοσειράς.

Στη συνέχεια, η συνάρτηση επιστρέφει τη itemsμορφή λίστας σε μορφή λίστας. Για παράδειγμα:

list("and", "red", "green", "blue"); // "red, green and blue"list("with", "red", "green", "blue"); // "red, green with blue"list("or", "red", "green", "blue"); // "red, green or blue"

Η listλειτουργία μας μας επιτρέπει να δημιουργούμε λίστες όταν το θέλουμε. Κάθε τύπος λίστας που δημιουργούμε, «και», «με», «ή» είναι μια εξειδίκευση της γενικής listλειτουργίας. Δεν θα ήταν ωραίο αν μπορούσαν να είναι δικές τους λειτουργίες ;!

Τρόπος χρήσης μερικής εφαρμογής

Εδώ μπορεί να βοηθήσει η μερική εφαρμογή. Για παράδειγμα, για να κάνουμε μια listAndσυνάρτηση, «ορίζουμε» (ή μερικώς εφαρμόζουμε ) το lastJoinόρισμα «και». Το αποτέλεσμα αυτής της διαδικασίας σημαίνει ότι μπορούμε να επικαλεστούμε τη μερικώς εφαρμοσμένη λειτουργία μας ως εξής:

listAnd("red", "green", "blue"); // "red, green and blue"

Δεν χρειάζεται να σταματήσει εκεί. Μπορούμε να κάνουμε πολλές εξειδικευμένες λειτουργίες εφαρμόζοντας εν μέρει ένα όρισμα στη λειτουργία λίστας μας:

listOr("red", "green", "blue"); // "red, green or blue"listWith("red", "green", "blue"); // "red, green with blue"

Για να γίνει αυτό, πρέπει να δημιουργήσουμε μια partialσυνάρτηση βοηθητικού προγράμματος:

const partial = (fn, firstArg) => { return (...lastArgs) => { return fn(firstArg, ...lastArgs); }}

Αυτή η συνάρτηση παίρνει μια συνάρτηση fnως πρώτη παράμετρος και firstArgως δεύτερη. Επιστρέφει μια νέα λειτουργία με μία παράμετρο, lastArgs. Αυτό συγκεντρώνει το πέρασμα στα επιχειρήματα.

Τώρα για να κάνουμε τη listAndλειτουργία μας , καλούμε να partialπεράσουμε στη listλειτουργία μας και την τελευταία λέξη ένωση:

const listAnd = partial(list, "and");

Η listAndλειτουργία μας παίρνει τώρα μόνο μια αυθαίρετη λίστα στοιχείων. Αυτή η συνάρτηση όταν γίνεται επίκληση, με τη σειρά της, θα επικαλεστεί τη listσυνάρτηση μεταβίβασης . Μπορούμε να δούμε ότι θα περάσει «και» ως το πρώτο επιχείρημα και θα συγκεντρωθούν lastArgsστη συνέχεια.

Δημιουργήσαμε τώρα μια μερικώς εφαρμοσμένη συνάρτηση. Μπορούμε να χρησιμοποιήσουμε αυτήν την εξειδικευμένη λειτουργία ξανά και ξανά στο πρόγραμμά μας:

listAnd("red", "green", "blue"); // "red, green and blue"

Προχωρώντας περαιτέρω

Η partialλειτουργία που δημιουργήσαμε είναι να δείξουμε πώς λειτουργεί η μερική εφαρμογή. Υπάρχουν μερικές εξαιρετικές λειτουργικές βιβλιοθήκες JavaScript που έχουν ενσωματωμένο αυτό το βοηθητικό πρόγραμμα, όπως το Ramda JS.

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