Table des matières
Les plats clés
Fonctions pures
Mutation contrôlée
Avantages des fonctions pures
Programmation fonctionnelle déraisonnablement pure
fonctions essentielles
moins est plus
test
liens
Des questions fréquemment posées sur la programmation fonctionnelle raisonnablement pure
Quelle est la signification des fonctions pures dans la programmation fonctionnelle?
En quoi la programmation fonctionnelle diffère-t-elle des autres paradigmes de programmation?
Comment puis-je implémenter des fonctions pures en javascript?
Quels sont les avantages de l'utilisation de fonctions pures en javascript?
Quels sont les défis de l'utilisation de fonctions pures en javascrip , ils présentent également certains défis. L'un des principaux défis est que JavaScript n'est pas un langage purement fonctionnel, et il permet des effets secondaires et des données mutables. Cela signifie que vous devez faire attention pour éviter d'introduire involontairement des effets secondaires dans vos fonctions. De plus, l'utilisation de fonctions pures peut parfois conduire à un code plus verbeux, car vous devez éviter de muter les données et renvoyer de nouvelles données.
Programmation fonctionnelle. est particulièrement bien adapté à la concurrence et au parallélisme. Parce que les fonctions pures n'ont pas d'effets secondaires, ils peuvent être exécutés en toute sécurité en parallèle sans se soucier des conditions de race ou de la corruption des données. Cela fait de la programmation fonctionnelle un outil puissant pour développer des applications simultanées et parallèles, en particulier dans un environnement informatique multi-core et distribué.
Quelle est la composition de la fonction dans la programmation fonctionnelle?
Qu'est-ce que l'immuabilité dans la programmation fonctionnelle?
Comment la programmation fonctionnelle gère-t-elle l'état?
Quelles sont les applications pratiques de la programmation fonctionnelle?
Maison interface Web js tutoriel Une introduction à la programmation fonctionnelle raisonnablement pure

Une introduction à la programmation fonctionnelle raisonnablement pure

Feb 18, 2025 pm 12:58 PM

An Introduction to Reasonably Pure Functional Programming

Une introduction à la programmation fonctionnelle raisonnablement pure

Les plats clés

  • Les fonctions pures sont essentielles dans la programmation fonctionnelle car elles renvoient la même sortie pour la même entrée sans provoquer d'effets secondaires, améliorant la prévisibilité et la testabilité.
  • La programmation fonctionnelle réduit la complexité du programme en décomposant les processus en fonctions plus simples et immuables, ce qui aide à minimiser les bogues et à améliorer la lisibilité du code.
  • La surextraction dans la programmation fonctionnelle, tout en réduisant la complexité du code, peut conduire à un code difficile à comprendre et à maintenir, soulignant l'importance de l'équilibre.
  • Les fonctions JavaScript essentielles telles que «Map», «Reduce», «Filter» et «Compose» sont cruciales pour adopter des paradigmes de programmation fonctionnelle et faciliter la création d'un code plus concis et déclaratif.
  • Les tests deviennent plus simples avec des fonctions pures, car leur nature isolée permet une configuration plus facile des conditions de test et des résultats attendus.
  • La programmation fonctionnelle n'est pas seulement un concept théorique, mais s'applique dans des scénarios pratiques comme la gestion des opérations asynchrones et des mises à jour de l'interface utilisateur, démontrant sa pertinence dans le développement Web moderne.
Cet article a été révisé par des pairs par Panayiotis «Pvgr» Velisarakos, Jezen Thomas et Florian Rappl. Merci à tous les pair examinateurs de SitePoint pour avoir fait du contenu SitePoint le meilleur possible!

Lorsque vous apprenez à programmer, vous êtes d'abord initié à la programmation procédurale; C'est là que vous contrôlez une machine en lui alimentant une liste séquentielle de commandes. Après avoir compris quelques principes fondamentaux linguistiques comme les variables, les affectations, les fonctions et les objets, vous pouvez bricoler ensemble un programme qui réalise ce que vous vous êtes mis à faire - et vous vous sentez comme un sorcier absolu.

Le processus de devenir un meilleur programme . Au fur et à mesure que vous devenez un meilleur programmeur, vous rédigerez des fonctions plus petites, obtiendrez une meilleure réutilisation de votre code, rédigerez des tests pour votre code et vous gagnerez la confiance que les programmes que vous écrivez continueront à faire ce que vous l'intendez. Personne n'aime trouver et corriger des bogues dans le code, donc devenir un meilleur programmeur consiste également à éviter certaines choses sujettes aux erreurs. Apprendre quoi éviter vient de l'expérience ou d'étudier les conseils de ceux qui sont plus expérimentés, comme Douglas Crockford explique en Javascript: les bonnes parties.

La programmation fonctionnelle nous donne des moyens de réduire la complexité de nos programmes en les réduisant dans leurs formes les plus simples: des fonctions qui se comportent comme des fonctions mathématiques pures. Apprendre les principes de la programmation fonctionnelle est un excellent ajout à vos compétences et vous aidera à écrire des programmes plus simples avec moins de bogues.

Les concepts clés de la programmation fonctionnelle sont des fonctions pures, des valeurs immuables, une composition et des effets secondaires apprivoisés.

Fonctions pures

Une fonction pure est une fonction qui, étant donné la même entrée, renvoie toujours la même sortie et n'a pas d'effet secondaire observable.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cette fonction est pure . Il ne dépend ni ne modifie aucun état en dehors de la fonction et il toujours renvoie la même valeur de sortie pour la même entrée.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cette fonction est impure car elle repose sur un état mutable externe en dehors de la fonction.

Si nous déplaçons cette variable à l'intérieur de la fonction, elle devient pure et nous pouvons être certains que notre fonction vérifiera correctement notre âge à chaque fois .

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Les fonctions pures n'ont pas effets latéraux . Voici quelques-uns importants à garder à l'esprit:

  • Accès à l'état du système en dehors de la fonction
  • Les objets de mutation sont passés comme arguments
  • faire un appel http
  • Obtention de l'entrée de l'utilisateur
  • interroger le dom

Mutation contrôlée

Vous devez être conscient des méthodes de mutator sur les tableaux et les objets qui modifient les objets sous-tendants, un exemple de ceci est la différence entre les méthodes d'épissage et de tranche de l'arraie.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Si nous évitons de muter les méthodes sur les objets transmis à nos fonctions, notre programme devient plus facile à raisonner, nous pouvons raisonnablement nous attendre à ce que nos fonctions ne changent pas de choses sous nous.

<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Avantages des fonctions pures

Les fonctions pures ont quelques avantages sur leurs homologues impurs:

  • plus facilement testable car leur seule responsabilité est de cartographier l'entrée -> sortie
  • Les résultats sont cachables car la même entrée donne toujours la même sortie
  • auto-documentation car les dépendances de la fonction sont explicites
  • plus facile à travailler car vous n'avez pas à vous soucier des effets secondaires

Parce que les résultats des fonctions purs sont mis à cache, nous pouvons les mémoriser des opérations si coûteuses que la première fois que les fonctions sont appelées. Par exemple, la mémorisation des résultats de la recherche d'un grand indice produirait de grandes améliorations de performances sur les rediffusions.

Programmation fonctionnelle déraisonnablement pure

réduire nos programmes à des fonctions pures peut considérablement réduire la complexité de nos programmes. Cependant, nos programmes fonctionnels peuvent également finir par nécessiter une aide de Rain Man pour comprendre si nous poussons l'abstraction fonctionnelle trop loin.

<span>import _ from 'ramda';
</span><span>import $ from 'jquery';
</span>
<span>var Impure = {
</span>  <span>getJSON: _.curry(function(callback<span>, url</span>) {
</span>    $<span>.getJSON(url, callback);
</span>  <span>}),
</span>
  <span>setHtml: _.curry(function(sel<span>, html</span>) {
</span>    <span>$(sel).html(html);
</span>  <span>})
</span><span>};
</span>
<span>var img = function (url) {
</span>  <span>return $('<img />', { src: url });
</span><span>};
</span>
<span>var url = function (t) {
</span>  <span>return 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' +
</span>    t <span>+ '&format=json&jsoncallback=?';
</span><span>};
</span>
<span>var mediaUrl = _.compose(_.prop('m'), _.prop('media'));
</span><span>var mediaToImg = _.compose(img, mediaUrl);
</span><span>var images = _.compose(_.map(mediaToImg), _.prop('items'));
</span><span>var renderImages = _.compose(Impure.setHtml("body"), images);
</span><span>var app = _.compose(Impure.getJSON(renderImages), url);
</span><span>app("cats");
</span>
Copier après la connexion
Copier après la connexion

prenez une minute pour digérer le code ci-dessus.

à moins que vous ayez un arrière-plan dans la programmation fonctionnelle de ces abstractions (curry, utilisation excessive de la composition et de l'hélice) sont vraiment difficiles à suivre, tout comme le flux d'exécution. Le code ci-dessous est plus facile à comprendre et à modifier, il décrit également beaucoup plus clairement le programme que l'approche purement fonctionnelle ci-dessus et c'est moins de code.

  • La fonction d'application prend une chaîne de balises
  • récupère JSON de Flickr
  • retire les URL de la réponse
  • construit un tableau de nœuds Une introduction à la programmation fonctionnelle raisonnablement pure
  • les insère dans le document
<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

ou, cette API alternative utilisant des abstractions comme Fetch and Promise nous aide à clarifier encore plus la signification de nos actions asynchrones.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

REMARQUE: Fetch et Promise sont des normes à venir afin qu'elles nécessitent des polyfills à utiliser aujourd'hui.

La demande Ajax et les opérations DOM ne seront jamais pures, mais nous pourrions faire une pure fonction à partir du reste, cartographiant la réponse JSON à un éventail d'images - excusons la dépendance à JQuery pour l'instant.

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Notre fonction est de faire deux choses maintenant:

  • Données de réponse de cartographie -> URL
  • Mappage URL -> Images

La manière «fonctionnelle» de le faire est de créer des fonctions distinctes pour ces deux tâches et nous pouvons utiliser la composition pour passer la réponse d'une fonction dans l'autre.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Compose Renvoie une fonction qui est la composition d'une liste de fonctions, chacune consommant la valeur de retour de la fonction qui suit.

Voici ce que fait Compose, passant la réponse des URL dans notre fonction d'images.

<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Il est utile de lire les arguments à composer de droite à gauche pour comprendre la direction du flux de données.

En réduisant notre programme à des fonctions pures, il nous donne une plus grande capacité à les réutiliser à l'avenir, ils sont beaucoup plus simples à tester et ils sont auto-documentés. L'inconvénient est que lorsqu'il est utilisé excessivement (comme dans le premier exemple), ces abstractions fonctionnelles peuvent rendre les choses plus complexes ce qui n'est certainement pas ce que nous voulons. La question la plus importante à poser quand le refactoring de code est la suivante:

Le code est-il plus facile à lire et à comprendre?

fonctions essentielles

Maintenant, je n'essaie pas du tout d'attaquer la programmation fonctionnelle. Chaque développeur devrait faire un effort concerté pour apprendre les fonctions fondamentales qui vous permettent de résumer les modèles communs dans la programmation en code déclaratif beaucoup plus concis, ou comme Marijn Haverbeke le dit ..

un programmeur armé d'un répertoire de fonctions fondamentales et, plus important encore, les connaissances sur la façon de les utiliser, est beaucoup plus efficace que celle qui part de zéro. - JavaScript éloquent, Marijn Haverbeke

Voici une liste de fonctions essentielles que chaque développeur JavaScript doit apprendre et maîtriser. C'est aussi un excellent moyen de se réprimer vos compétences en JavaScript pour écrire chacune de ces fonctions à partir de zéro.

Arrays

  • foreach
  • map
  • Filtre
  • Réduisez

Fonctions

  • Déboucher
  • composer
  • partiel
  • curry

moins est plus

Examinons certaines étapes pratiques que nous pouvons prendre pour améliorer le code ci-dessous en utilisant des concepts de programmation fonctionnelle.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Réduire la dépendance des fonctions à l'état partagé

Cela peut sembler évident et trivial, mais j'écris toujours des fonctions qui accèdent et modifient beaucoup d'état en dehors d'eux-mêmes, cela les rend plus difficiles à tester et plus sujets à l'erreur.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Utilisez des abstractions de langage plus lisibles comme ForEach pour itérer

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Utilisez des abstractions de niveau supérieur comme la carte pour réduire la quantité de code

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Réduisez les fonctions à leurs formes les plus simples

<span>let items = ['a','b','c'];
</span><span>let newItems = pure(items);
</span><span>// I expect items to be ['a','b','c']
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Supprimer le code jusqu'à ce qu'il cesse de fonctionner

Nous n'avons pas du tout besoin d'une fonction pour une tâche aussi simple, le langage nous fournit des abstractions suffisantes pour l'écrire textuellement.

<span>import _ from 'ramda';
</span><span>import $ from 'jquery';
</span>
<span>var Impure = {
</span>  <span>getJSON: _.curry(function(callback<span>, url</span>) {
</span>    $<span>.getJSON(url, callback);
</span>  <span>}),
</span>
  <span>setHtml: _.curry(function(sel<span>, html</span>) {
</span>    <span>$(sel).html(html);
</span>  <span>})
</span><span>};
</span>
<span>var img = function (url) {
</span>  <span>return $('<img />', { src: url });
</span><span>};
</span>
<span>var url = function (t) {
</span>  <span>return 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' +
</span>    t <span>+ '&format=json&jsoncallback=?';
</span><span>};
</span>
<span>var mediaUrl = _.compose(_.prop('m'), _.prop('media'));
</span><span>var mediaToImg = _.compose(img, mediaUrl);
</span><span>var images = _.compose(_.map(mediaToImg), _.prop('items'));
</span><span>var renderImages = _.compose(Impure.setHtml("body"), images);
</span><span>var app = _.compose(Impure.getJSON(renderImages), url);
</span><span>app("cats");
</span>
Copier après la connexion
Copier après la connexion

test

La possibilité de tester simplement nos programmes est un avantage clé des fonctions pures, donc dans cette section, nous allons configurer un harnais de test pour notre module Flickr que nous envisageons plus tôt.

Lancez un terminal et que votre éditeur de texte soit prêt et prêt, nous utiliserons Mocha comme coureur de test et Babel pour compiller notre code ES6.

<span>var app = (tags)=> {
</span>  <span>let url = <span>`http://api.flickr.com/services/feeds/photos_public.gne?tags=<span>${tags}</span>&format=json&jsoncallback=?`</span>
</span>  $<span>.getJSON(url, (data)=> {
</span>    <span>let urls = data.items.map((item)=> item.media.m)
</span>    <span>let images = urls.map((url)=> $('<img />', { src: url }) )
</span>
    <span>$(document.body).html(images)
</span>  <span>})
</span><span>}
</span><span>app("cats")
</span>
Copier après la connexion

Mocha a un tas de fonctions pratiques comme décrire et pour briser nos tests et nos crochets tels que avant et après pour les tâches de configuration et de démontage. Assert est un package de nœud de base qui peut effectuer des tests d'égalité simples, affirmer et affirmer.

Écrivons notre premier test dans le test / exemple.js

<span>let flickr = (tags)=> {
</span>  <span>let url = <span>`http://api.flickr.com/services/feeds/photos_public.gne?tags=<span>${tags}</span>&format=json&jsoncallback=?`</span>
</span>  <span>return fetch(url)
</span>  <span>.then((resp)=> resp.json())
</span>  <span>.then((data)=> {
</span>    <span>let urls = data.items.map((item)=> item.media.m )
</span>    <span>let images = urls.map((url)=> $('<img />', { src: url }) )
</span>
    <span>return images
</span>  <span>})
</span><span>}
</span><span>flickr("cats").then((images)=> {
</span>  <span>$(document.body).html(images)
</span><span>})
</span>
Copier après la connexion
ouvrir package.json et modifier le script "test" à ce qui suit

<span>let responseToImages = (resp)=> {
</span>  <span>let urls = resp.items.map((item)=> item.media.m )
</span>  <span>let images = urls.map((url)=> $('<img />', { src: url }))
</span>
  <span>return images
</span><span>}
</span>
Copier après la connexion
Ensuite, vous devriez pouvoir exécuter le test NPM à partir de la ligne de commande pour confirmer que tout fonctionne comme prévu.

<span>let urls = (data)=> {
</span>  <span>return data.items.map((item)=> item.media.m)
</span><span>}
</span><span>let images = (urls)=> {
</span>  <span>return urls.map((url)=> $('<img />', { src: url }))
</span><span>}
</span><span>let responseToImages = _.compose(images, urls)
</span>
Copier après la connexion
boom.

Remarque: vous pouvez également ajouter un drapeau -W à la fin de cette commande si vous voulez que Mocha surveillait les modifications et exécutera automatiquement les tests, ils fonctionneront considérablement plus rapidement lors des rediffusions.

<span>let responseToImages = (data)=> {
</span>  <span>return images(urls(data))
</span><span>}
</span>
Copier après la connexion
Tester notre module Flickr

Ajoutons notre module dans lib / flickr.js

<span>let items = ['a', 'b', 'c'];
</span><span>let upperCaseItems = ()=> {
</span>  <span>let arr = [];
</span>  <span>for (let i = 0, ii = items.length; i < ii; i++) {
</span>    <span>let item = items[i];
</span>    arr<span>.push(item.toUpperCase());
</span>  <span>}
</span>  items <span>= arr;
</span><span>}
</span>
Copier après la connexion
Notre module exposent deux méthodes: Flickr à consommer publiquement et une fonction privée _Responsetoimages afin que nous puissions tester cela isolément.

Nous avons quelques nouvelles dépendances: jQuery, souligner et polyfills pour le fetch et la promesse. Pour tester ceux que nous pouvons utiliser JSDom pour polyfilluer la fenêtre et le document des objets DOM et nous pouvons utiliser le package Sinon pour déborder l'API Fetch.

<span>// pure
</span><span>function add(a<span>, b</span>) {
</span>  <span>return a + b;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ouvrir Test / _SetUp.js et nous configurerons JSDom avec nos globaux dont notre module dépend.

<span>// impure
</span><span>var minimum = 21;
</span><span>var checkAge = function(age) {
</span>  <span>return age >= minimum; // if minimum is changed we're cactus
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Nos tests peuvent passer dans le test / flickr.js où nous ferons des affirmations sur la sortie de nos fonctions donnée par des entrées prédéfinies. Nous «Stub» ou remplacez la méthode globale de fetch pour intercepter et simuler la demande HTTP afin que nous puissions exécuter nos tests sans frapper directement l'API Flickr.

<span>// pure
</span><span>var checkAge = function(age) {
</span>  <span>var minimum = 21;
</span>  <span>return age >= minimum;
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exécutez à nouveau nos tests avec le test NPM et vous devriez voir trois assurer les tiques vertes.

<span>// impure, splice mutates the array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.splice(0,3); // arr may never be the same again
</span><span>};
</span>
<span>// pure, slice returns a new array
</span><span>var firstThree = function(arr) {
</span>  <span>return arr.slice(0,3);
</span><span>};
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

ouf! Nous avons testé avec succès notre petit module et les fonctions qui le composent, l'apprentissage des fonctions pures et comment utiliser la composition fonctionnelle en cours de route. Nous avons séparé le pur de l'impur, il est lisible, composé de petites fonctions, et il est bien testé. Le code est plus facile à lire, à comprendre et à modifier que l'exemple déraisonnablement pur ci-dessus et c'est mon seul objectif lorsque le code de refactorisation.

Fonctions pures, utilisez-les.

liens

  • Guide du professeur Frisby pour la programmation fonctionnelle - @DrBoolean - Cet excellent livre gratuit sur la programmation fonctionnelle de Brian Lonsdorf est le meilleur guide du FP que j'ai rencontré. Beaucoup d'idées et d'exemples de cet article proviennent de ce livre.
  • éloquent JavaScript - Programmation fonctionnelle @Marijnjh - Le livre de Marijn Haverbeke reste l'une de mes intros préférés de tous les temps à la programmation et a un grand chapitre sur la programmation fonctionnelle aussi.
  • Contrôle - Creger dans une bibliothèque d'utilité comme le sous-terrain, Lodash ou Ramda est une étape importante dans la maturation en tant que développeur. Comprendre comment utiliser ces fonctions réduira considérablement la quantité de code que vous devez écrire et rendra vos programmes plus déclaratifs.

-

C'est tout pour le moment! Merci d'avoir lu et j'espère que vous avez trouvé que cela une bonne introduction à la programmation fonctionnelle, à la refactorisation et aux tests en JavaScript. C'est un paradigme intéressant qui fait des vagues pour le moment, en grande partie en raison de la popularité croissante de bibliothèques comme React, Redux, Elm, Cycle et Reactivex qui encouragent ou appliquent ces modèles.

sauter, l'eau est chaude.

Des questions fréquemment posées sur la programmation fonctionnelle raisonnablement pure

Quelle est la signification des fonctions pures dans la programmation fonctionnelle?

Les fonctions pures sont un concept fondamental dans la programmation fonctionnelle. Ce sont des fonctions qui produisent toujours la même sortie pour la même entrée et n'ont aucun effet secondaire. Cela signifie qu'ils ne modifient aucun État en dehors de leur portée ou dépendent d'un état externe. Cela les rend prévisibles et faciles à tester, car il vous suffit de considérer l'entrée et la sortie, sans vous soucier des facteurs externes. Les fonctions pures favorisent également la réutilisabilité et la lisibilité du code, ce qui rend votre code plus facile à comprendre et à entretenir.

En quoi la programmation fonctionnelle diffère-t-elle des autres paradigmes de programmation?

La programmation fonctionnelle est un paradigme de programmation qui traite le calcul comme l'évaluation des fonctions mathématiques et évite de changer l'état et les données mutables. Cela contraste avec la programmation impérative, où les programmes sont composés de déclarations qui modifient l'état global lorsqu'ils sont exécutés. La programmation fonctionnelle favorise les abstractions de niveau supérieur, comme les fonctions en tant que citoyens de première classe, et encourage la programmation avec des expressions au lieu des déclarations. Cela conduit à un style de programmation plus déclaratif et expressif qui est plus facile à raisonner.

Comment puis-je implémenter des fonctions pures en javascript?

La mise en œuvre de fonctions pures en javascript implique de s'assurer que votre fonction produit la même sortie pour la même entrée et ne produit aucun effet secondaire. Voici un exemple:

Fonction Ajouter (a, b) {
Renvoie un b;
}

Dans cet exemple, la fonction ADD est une fonction pure car elle renvoie toujours le Même résultat compte tenu des mêmes arguments et ne modifie aucun état externe.

Quels sont les avantages de l'utilisation de fonctions pures en javascript?

Les fonctions pures offrent plusieurs avantages en JavaScript. Ils rendent votre code plus prévisible et plus facile à tester et à déboguer, car il vous suffit de considérer l'entrée et la sortie de la fonction. Ils rendent également votre code plus lisible et maintenable, car ils favorisent un style de programmation clair et simple. De plus, les fonctions pures sont très réutilisables et composables, vous permettant de créer des fonctionnalités plus complexes avec moins de code.

Quels sont les défis de l'utilisation de fonctions pures en javascrip , ils présentent également certains défis. L'un des principaux défis est que JavaScript n'est pas un langage purement fonctionnel, et il permet des effets secondaires et des données mutables. Cela signifie que vous devez faire attention pour éviter d'introduire involontairement des effets secondaires dans vos fonctions. De plus, l'utilisation de fonctions pures peut parfois conduire à un code plus verbeux, car vous devez éviter de muter les données et renvoyer de nouvelles données.

Comment la programmation fonctionnelle est-elle liée à la concurrence et au parallélisme?

Programmation fonctionnelle. est particulièrement bien adapté à la concurrence et au parallélisme. Parce que les fonctions pures n'ont pas d'effets secondaires, ils peuvent être exécutés en toute sécurité en parallèle sans se soucier des conditions de race ou de la corruption des données. Cela fait de la programmation fonctionnelle un outil puissant pour développer des applications simultanées et parallèles, en particulier dans un environnement informatique multi-core et distribué.

Quelle est la composition de la fonction dans la programmation fonctionnelle?

La composition de la fonction est un concept fondamental dans la programmation fonctionnelle. Il s'agit de combiner deux fonctions ou plus pour créer une nouvelle fonction. Le résultat d'une fonction est utilisé comme entrée à la fonction suivante. Cela vous permet de créer des fonctionnalités complexes à partir de fonctions simples, favorisant la réutilisabilité et la lisibilité du code.

Qu'est-ce que l'immuabilité dans la programmation fonctionnelle?

L'immuabilité est un principe clé de la programmation fonctionnelle. Cela signifie qu'une fois une structure de données créée, elle ne peut pas être modifiée. Au lieu de cela, si vous souhaitez modifier une structure de données, vous en créez une nouvelle avec les modifications souhaitées. Cela évite les effets secondaires et rend votre code plus sûr et plus facile à raisonner.

Comment la programmation fonctionnelle gère-t-elle l'état?

Dans la programmation fonctionnelle, l'état est traité avec soin pour éviter les effets secondaires. Au lieu de changer l'état, la programmation fonctionnelle utilise souvent des fonctions pures qui renvoient un nouvel état. Cela rend l'État prévisible et facile à gérer. Certains langages de programmation fonctionnelle offrent également des fonctionnalités avancées pour la gestion de l'État, telles que les Monades dans Haskell.

Quelles sont les applications pratiques de la programmation fonctionnelle?

La programmation fonctionnelle peut être utilisée dans un large éventail d'applications . Il est particulièrement utile dans les situations où la concurrence et le parallélisme sont importants, comme dans l'informatique multi-core et distribuée. La programmation fonctionnelle est également couramment utilisée dans le traitement des données et l'analyse, où les fonctions pures et l'immuabilité peuvent aider à assurer l'intégrité des données. De plus, les concepts de programmation fonctionnelle sont de plus en plus adoptés dans le développement frontal, avec des cadres populaires comme React.js en utilisant un style fonctionnel pour le développement des composants.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1672
14
Tutoriel PHP
1276
29
Tutoriel C#
1256
24
Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Apr 16, 2025 am 12:12 AM

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Javascript et le web: fonctionnalité de base et cas d'utilisation Javascript et le web: fonctionnalité de base et cas d'utilisation Apr 18, 2025 am 12:19 AM

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

JavaScript en action: Exemples et projets du monde réel JavaScript en action: Exemples et projets du monde réel Apr 19, 2025 am 12:13 AM

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le moteur JavaScript: détails de l'implémentation Comprendre le moteur JavaScript: détails de l'implémentation Apr 17, 2025 am 12:05 AM

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Python vs JavaScript: environnements et outils de développement Python vs JavaScript: environnements et outils de développement Apr 26, 2025 am 12:09 AM

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

Le rôle de C / C dans les interprètes et compilateurs JavaScript Le rôle de C / C dans les interprètes et compilateurs JavaScript Apr 20, 2025 am 12:01 AM

C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

Des sites Web aux applications: les diverses applications de JavaScript Des sites Web aux applications: les diverses applications de JavaScript Apr 22, 2025 am 12:02 AM

JavaScript est largement utilisé dans les sites Web, les applications mobiles, les applications de bureau et la programmation côté serveur. 1) Dans le développement de sites Web, JavaScript exploite DOM avec HTML et CSS pour réaliser des effets dynamiques et prend en charge des cadres tels que JQuery et React. 2) Grâce à la réactnative et ionique, JavaScript est utilisé pour développer des applications mobiles multiplateformes. 3) Le cadre électronique permet à JavaScript de créer des applications de bureau. 4) Node.js permet à JavaScript d'exécuter le côté du serveur et prend en charge les demandes simultanées élevées.

See all articles