Maison > interface Web > js tutoriel > Introduction à la programmation fonctionnelle en JavaScript : Monade et foncteurs #7

Introduction à la programmation fonctionnelle en JavaScript : Monade et foncteurs #7

WBOY
Libérer: 2024-07-18 09:41:19
original
758 Les gens l'ont consulté

Introduction to Functional Programming in JavaScript: Monad and functors #7

Les monades et les foncteurs sont des concepts avancés de la programmation fonctionnelle qui fournissent des abstractions puissantes pour gérer les transformations de données, les effets secondaires et la composition. Bien qu'ils proviennent de la théorie des catégories en mathématiques, ils ont des applications pratiques dans des langages de programmation comme JavaScript.

Qu'est-ce qu'un foncteur ?

Un foncteur est un type de données qui implémente une méthode map, qui applique une fonction à la valeur à l'intérieur du foncteur et renvoie un nouveau foncteur avec la valeur transformée. Essentiellement, les foncteurs vous permettent d'appliquer une fonction à une valeur enveloppée sans modifier la structure du conteneur.

Exemple de foncteur
class Box {
  constructor(value) {
    this.value = value;
  }

  map(fn) {
    return new Box(fn(this.value));
  }
}

// Usage
const box = new Box(2);
const result = box.map(x => x + 3).map(x => x * 2);
console.log(result); // Box { value: 10 }
Copier après la connexion

Dans cet exemple, Box est un foncteur. La méthode map applique la fonction fn à la valeur à l'intérieur de la boîte et renvoie une nouvelle boîte avec la valeur transformée.

Qu'est-ce qu'une Monade ?

Une monade est un type de foncteur qui implémente deux méthodes supplémentaires : of (ou return dans certains langages) et flatMap (également connu sous le nom de bind ou chain). Les monades offrent un moyen d'enchaîner les opérations sur la valeur contenue tout en conservant le contexte de la monade.

Propriétés des monades
  1. Unité (de) : Une méthode qui prend une valeur et renvoie une monade contenant cette valeur.
  2. Bind (flatMap) : Une méthode qui prend une fonction renvoyant une monade et l'applique à la valeur contenue, aplatissant le résultat.
Exemple de monade
class Box {
  constructor(value) {
    this.value = value;
  }

  static of(value) {
    return new Box(value);
  }

  map(fn) {
    return Box.of(fn(this.value));
  }

  flatMap(fn) {
    return fn(this.value);
  }
}

// Usage
const box = Box.of(2);
const result = box
  .flatMap(x => Box.of(x + 3))
  .flatMap(x => Box.of(x * 2));
console.log(result); // Box { value: 10 }
Copier après la connexion

Dans cet exemple, Box est à la fois un foncteur et une monade. La méthode of enveloppe une valeur dans une boîte et la méthode flatMap applique une fonction à la valeur contenue et renvoie la monade résultante.

Cas d'utilisation pratique des monades et des foncteurs

Les monades et les foncteurs ne sont pas seulement des constructions théoriques ; ils ont des applications pratiques dans la programmation du monde réel. Explorons quelques cas d'utilisation courants.

Gestion des valeurs facultatives avec Maybe Monad

La monade Maybe est utilisée pour gérer les valeurs facultatives, en évitant les valeurs nulles ou indéfinies et en fournissant un moyen sûr d'enchaîner les opérations.

class Maybe {
  constructor(value) {
    this.value = value;
  }

  static of(value) {
    return new Maybe(value);
  }

  isNothing() {
    return this.value === null || this.value === undefined;
  }

  map(fn) {
    return this.isNothing() ? this : Maybe.of(fn(this.value));
  }

  flatMap(fn) {
    return this.isNothing() ? this : fn(this.value);
  }
}

// Usage
const maybeValue = Maybe.of('hello')
  .map(str => str.toUpperCase())
  .flatMap(str => Maybe.of(`${str} WORLD`));
console.log(maybeValue); // Maybe { value: 'HELLO WORLD' }
Copier après la connexion

Dans cet exemple, la monade Maybe gère en toute sécurité la valeur facultative, autorisant les transformations uniquement si la valeur n'est pas nulle ou indéfinie.

Gestion des opérations asynchrones avec Promise Monad

Les promesses en JavaScript sont des monades qui gèrent les opérations asynchrones, fournissant un moyen d'enchaîner les opérations et de gérer les erreurs.

const fetchData = url => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(`Data from ${url}`);
    }, 1000);
  });
};

// Usage
fetchData('https://api.example.com')
  .then(data => {
    console.log(data); // 'Data from https://api.example.com'
    return fetchData('https://api.example.com/2');
  })
  .then(data => {
    console.log(data); // 'Data from https://api.example.com/2'
  })
  .catch(error => {
    console.error(error);
  });
Copier après la connexion

Les promesses vous permettent de gérer les opérations asynchrones de manière propre et composable, en enchaînant les opérations et en gérant les erreurs avec élégance.

Les monades et les foncteurs sont de puissantes abstractions de la programmation fonctionnelle qui vous permettent de travailler avec les transformations de données, les effets secondaires et la composition de manière plus structurée et prévisible.

Bien que les fondements mathématiques des monades et des foncteurs puissent être complexes, leurs applications pratiques sont très précieuses dans la programmation du monde réel. Que vous gériez des valeurs facultatives avec la monade Maybe ou que vous gériez des opérations asynchrones avec Promises, ces techniques de programmation fonctionnelle peuvent vous aider à créer des applications plus robustes et plus fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal