window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster υπάρχει ήδη') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Λειτουργικός προγραμματισμός σε JavaScript Μέρος 3 - Functor & Monad Maybe - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2022-06-21
Ανάπτυξη λογισμικού

Λειτουργικός προγραμματισμός στο JavaScript Μέρος 3 - Λειτουργός & Μονάδα Ίσως

The Codest

Pawel Ged

Vue.js Προγραμματιστής

Ελέγξτε το τρίτο μέρος της σειράς άρθρων Η ισχύς του λειτουργικού προγραμματισμού στο JavaScript. Αυτή τη φορά ο ειδικός μας στο JavaScript εξηγεί περισσότερα για τους Functor και Monad Maybe.

Εισαγωγή

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

Αν είστε νέοι εδώ, φροντίστε να ελέγξετε τα τελευταία 2 μέρη μου σχετικά με τον λειτουργικό προγραμματισμό στο blog The Codest για:

  • Μέρος 1 - Εισαγωγή
  • Μέρος 2 - Συνδυαστές

Λειτουργός

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

Δήλωση

 const Functor = value => ({
     map: fn => Functor(fn(value)),
     chain: fn => fn(value),
     of: () => value
 });

χάρτης - χρήσιμο όταν θέλετε να αλλάξετε την κατάσταση μιας τιμής σε ένα δοχείο αλλά δεν θέλετε να την επιστρέψετε ακόμα.

αλυσίδα - χρησιμοποιείται αν θέλετε να περάσετε μια τιμή σε μια συνάρτηση χωρίς να τροποποιήσετε την κατάσταση του δοχείου. Συνήθως στο τέλος της χάρτης κλήσεις.

του - επιστροφή τρέχουσας τιμής

Επιτακτικό παράδειγμα

const randomInt = (max) => Math.floor(Math.random() * (max + 1))

const randomNumber = randomInt(200) // επιστρέφει αριθμό μεταξύ 0 και 200

decrease(randomNumber) // επιστρέφει (αριθμό μεταξύ 0 και 200) - 1

Δηλωτικό παράδειγμα

const randomIntWrapper = (max) =>
Functor(max)
.map(increase) // max + 1
.map(multiplyBy(Math.random())) // Math.random() * (max + 1)
.map(Math.floor) // Math.floor(Math.random() * (max + 1))

const randomNumber = randomIntWrapper(200)

randomNumber.of() // επιστρέφει αριθμό μεταξύ 0 και 200
randomNumber.chain(decrease) // επιστρέφει (αριθμό μεταξύ 0 και 200) - 1

Μονάδα

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

Μονάδα Ίσως

Η Μονάδα ίσως λύνει το πρόβλημα των τιμών που επιστρέφουν μη αληθείς. Όταν συμβαίνει αυτό, οι επόμενες χάρτης κλήσεις αγνοούνται, αλλά σας επιτρέπει να επιστρέψετε μια εναλλακτική κλήση καλώντας την getOr μέθοδος. Σας επιτρέπει να αποφύγετε τη χρήση των τελεστών if / else, οι οποίοι είναι δημοφιλείς σε προστακτική προγραμματισμός. Αυτή η μονάδα αποτελείται από τρία δοχεία:

Τίποτα - εκτελείται όταν μια τιμή που δεν είναι αληθής πέφτει στο δοχείο ή φίλτρο η μέθοδος επιστρέφει false. Χρησιμοποιείται για την προσομοίωση της εκτέλεσης μιας συνάρτησης. Αυτό σημαίνει ότι αυτό το δοχείο λαμβάνει τη συνάρτηση αλλά δεν την εκτελεί.

Απλά - αυτό είναι το κύριο δοχείο που εκτελεί όλες τις λειτουργίες, αλλά αν η τιμή αλλάξει σε ψευδή τιμή ή φίλτρο επιστρέφει false, θα το περάσει στη μέθοδο Τίποτα εμπορευματοκιβώτιο.

Ίσως - Παίρνω την αρχική τιμή και αποφασίζω ποιο δοχείο θα καλέσω στην αρχή.

Δήλωση

const Just = value => ({
map: fn => Maybe(fn(value)),
chain: fn => fn(value),
of: () => value,
getOr: () => value,
filter: fn => fn(value) ? Just(value) : Nothing(),
type: 'just'
});

const Nothing = () => ({
map: fn => Nothing(),
chain: fn => fn(),
of: () => Nothing(),
getOr: substitute => substitute,
filter: () => Nothing(),
type: 'nothing'
});

const Maybe = value =>
value === null || value === undefined || value.type === 'nothing'
? Nothing()
: Just(value)
μέθοδοι πίνακα λειτουργός

Τώρα ας φτιάξουμε το προηγούμενο παράδειγμα σχετικά με την κατάσταση. Εάν το max είναι μεγαλύτερο από το μηδέν, θα εκτελεστεί η συνάρτηση. Διαφορετικά, θα επιστρέψει 0.

Επιτακτικό παράδειγμα

const randomInt = (max) => {
if(max > 0) {
return Math.floor(Math.random() * (max + 1))
} else {
return 0
}
}

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // επιστρέφει τυχαία
const randomPage = randomInt(-10) || bookMiddlePage // επιστρέφει 200

Δηλωτικό παράδειγμα

const randomIntWrapper = (max) =>
Maybe(max)
.filter(max => max > 0) // τιμή false αγνοεί περαιτέρω κλήσεις
.map(increase)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// Απλά δοχείο
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // επιστρέφει τυχαία
// Τίποτα δοχείο
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // επιστρέφει 200


πανό συνεργασίας

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Ασύγχρονη και μονόκλωνη λειτουργία JavaScript?

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

Lukasz Kolko
E-commerce

Διλήμματα ασφάλειας στον κυβερνοχώρο: Διαρροές δεδομένων

Η προ-Χριστουγεννιάτικη βιασύνη βρίσκεται σε πλήρη εξέλιξη. Σε αναζήτηση δώρων για τους αγαπημένους τους, οι άνθρωποι είναι όλο και πιο πρόθυμοι να "μπουκάρουν" στα ηλεκτρονικά καταστήματα

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

    elGreek
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek