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 existe déjà') } 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 }) }, } } })() Programmation fonctionnelle en JavaScript Partie 3 - Functor & Monad Maybe - The Codest
The Codest
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Industries
    • Fintech et banque
    • E-commerce
    • Adtech
    • Santé (Healthtech)
    • Fabrication
    • Logistique
    • Automobile
    • IOT
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
Flèche arrière RETOUR
2022-06-21
Développement de logiciels

Programmation fonctionnelle en JavaScript Partie 3 - Functeur et Monade Peut-être

The Codest

Pawel Ged

Vue.js Développeur

Voici la troisième partie de notre série d'articles sur la puissance de la programmation fonctionnelle dans JavaScript. Cette fois-ci, notre expert JavaScript vous en dit plus sur Functor et Monad Maybe.

Introduction

Souvent, il est difficile de maintenir les données non modifiables. Le modèle d'enveloppement des données dans un conteneur vient à la rescousse. Il sécurise les valeurs de sorte que leur manipulation est sûre et exclut les effets secondaires.

Si vous êtes nouveau ici, assurez-vous de consulter mes deux dernières parties concernant la programmation fonctionnelle sur le blog The Codest :

  • Partie 1 - Introduction
  • Partie 2 - Combinateurs

Functeur

Il n'a pas de logique complexe. Sa tâche principale consiste à envelopper le contexte et à exécuter les fonctions qu'il reçoit de l'extérieur. Chaque fois que la valeur change, une nouvelle instance de conteneur est reconditionnée et renvoyée. Lors de l'appel à la fonction carte qui prend une action spécifique, il renvoie une nouvelle instance de conteneur avec la valeur renvoyée par la fonction passée, tout en maintenant le principe de non-modification.

Déclaration

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

carte - utile lorsque vous souhaitez modifier l'état d'une valeur dans un conteneur mais que vous ne souhaitez pas encore la renvoyer.

chaîne - utilisé pour passer une valeur à une fonction sans modifier l'état du conteneur. Habituellement à la fin de carte appels.

de - renvoie la valeur actuelle

Exemple d'impératif

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

const randomNumber = randomInt(200) // renvoie un nombre entre 0 et 200

decrease(randomNumber) // renvoie (nombre entre 0 et 200) - 1

Exemple déclaratif

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() // renvoie un nombre entre 0 et 200
randomNumber.chain(decrease) // renvoie (nombre entre 0 et 200) - 1

Monade

Parfois, en plus des fonctions qui déclenchent le nouvel état de la valeur, vous avez besoin d'une logique supplémentaire cachée dans le conteneur. C'est là que la monade s'avère utile, puisqu'il s'agit d'une extension de foncteur. Il peut, par exemple, décider de ce qui doit se passer lorsque la valeur a une certaine valeur ou de la voie à suivre pour les actions suivantes.

Monade Peut-être

La monade maybe résout le problème des valeurs qui renvoient des valeurs fausses. Lorsque cela se produit, les carte sont ignorés, mais il vous permet de renvoyer une alternative en appelant la fonction getOr . Elle permet d'éviter l'utilisation d'opérateurs Elle vous permet d'éviter l'utilisation des opérateurs if / else, qui sont très répandus en impératif programmation. Cette monade se compose de trois conteneurs :

Rien - s'exécute lorsqu'une valeur qui n'est pas vraie tombe dans le conteneur ou dans l'espace de stockage. filtre renvoie un faux. Elle est utilisée pour simuler l'exécution d'une fonction. Cela signifie que ce conteneur reçoit la fonction mais ne l'exécute pas.

Juste - il s'agit du conteneur principal qui exécute toutes les fonctions, mais si la valeur devient fausse ou si le conteneur filtre renvoie une valeur fausse, il la transmettra à la méthode Rien contenant.

Peut-être - Je prends la valeur initiale et décide quel conteneur appeler au début.

Déclaration

const Just = valeur => ({
map : fn => Maybe(fn(valeur)),
chain : fn => fn(valeur),
of : () => valeur,
getOr : () => valeur,
filter : fn => fn(valeur) ? Just(valeur) : 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(valeur)
méthodes de tableau foncteur

Reprenons maintenant l'exemple précédent en ce qui concerne la condition. Si max est supérieur à zéro, la fonction sera exécutée. Dans le cas contraire, elle renverra 0.

Exemple d'impératif

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

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // retourne aléatoire
const randomPage = randomInt(-10) || bookMiddlePage // renvoie 200

Exemple déclaratif

const randomIntWrapper = (max) =>
Maybe(max)
.filter(max => max > 0) // la valeur false ignore les autres appels
.map(augmentation)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// Juste un conteneur
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // retourne aléatoire
// Conteneur sans rien
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // renvoie 200


bannière de coopération

Articles connexes

Développement de logiciels

Asynchrone et monotâche JavaScript ?

JavaScript est un langage monotâche et, en même temps, non bloquant, asynchrone et concurrent. Cet article vous expliquera comment cela se passe.

Lukasz Kolko
E-commerce

Dilemmes de la cybersécurité : Fuites de données

La ruée vers les cadeaux de Noël bat son plein. À la recherche de cadeaux pour leurs proches, les gens sont de plus en plus enclins à "prendre d'assaut" les boutiques en ligne

The Codest
Jakub Jakubowicz CTO & Co-Fondateur

Abonnez-vous à notre base de connaissances et restez au courant de l'expertise du secteur des technologies de l'information.

    A propos de nous

    The Codest - Entreprise internationale de développement de logiciels avec des centres technologiques en Pologne.

    Royaume-Uni - Siège

    • Bureau 303B, 182-184 High Street North E6 2JA
      Londres, Angleterre

    Pologne - Les pôles technologiques locaux

    • Parc de bureaux Fabryczna, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsovie, Pologne

      The Codest

    • Accueil
    • A propos de nous
    • Services
    • Études de cas
    • Savoir comment
    • Carrières
    • Dictionnaire

      Services

    • Conseil consultatif
    • Développement de logiciels
    • Développement backend
    • Développement frontal
    • Staff Augmentation
    • Développeurs backend
    • Ingénieurs en informatique dématérialisée
    • Ingénieurs des données
    • Autres
    • Ingénieurs AQ

      Ressources

    • Faits et mythes concernant la coopération avec un partenaire externe de développement de logiciels
    • Des États-Unis à l'Europe : Pourquoi les startups américaines décident-elles de se délocaliser en Europe ?
    • Comparaison des pôles de développement Tech Offshore : Tech Offshore Europe (Pologne), ASEAN (Philippines), Eurasie (Turquie)
    • Quels sont les principaux défis des CTO et des DSI ?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Conditions d'utilisation du site web

    Copyright © 2025 par The Codest. Tous droits réservés.

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