Outils Javascript en action
Découvrez quelques outils de récupération JavaScript pour améliorer votre jeu de programmation. En savoir plus sur ESLint, Prettier et Husky !
Lisez notre article pour découvrir la puissance de la programmation fonctionnelle dans JavaScript. La programmation fonctionnelle est classée comme un paradigme déclaratif où la description du programme est séparée des calculs.
"En termes simples, la programmation fonctionnelle est une développement de logiciels un style qui met l'accent sur l'utilisation des fonctions"
Extraits du livre : Luis Atencio "Functional Programming in JavaScript. Comment améliorer votre JavaScript programmes utilisant des techniques fonctionnelles"
Programmation fonctionnelle est classé comme déclaratif où la description du programme est séparée des calculs. L'accent est mis ici sur l'utilisation d'expressions pour décrire la logique du programme. C'est le contraire de impératif où le programme code est exécuté étape par étape et indique à l'ordinateur en détail comment effectuer le travail.
Prenons le cas d'un tableau de nombres entiers. Nous devons élever chacun d'entre eux à la deuxième puissance et ne sélectionner que les valeurs qui ne sont pas paires.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] ;
const résultats = []
for(let i = 0 ; i < numbers.length ; i++) {
const secondPower = Math.pow(numbers[i], 2)
if(secondPower & 1) { // ou % 2 mais les opérations sur les bits sont plus rapides
results.push(secondPower) ;
}
}
console.log(results) // [1, 9, 25, 49, 81]
En ce qui concerne les impératif l'accent mis sur les détails de la mise en œuvre est clairement visible. Dans la boucle, vous pouvez voir l'index du tableau en fonction de la nécessité de contrôler le nombre d'éléments. En raison du grand nombre de détails dans le code, il est plus difficile de se concentrer sur ce qu'il fait. Concentrons-nous maintenant sur l'élément déclaratif solution.
const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1 ;
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const results = nombres
.map(risesToSecondPower)
.filter(isOdd) ;
console.log(results) // [1, 9, 25, 49, 81]
Dans cette solution, la mise en œuvre a été séparée de l'invocation en plaçant la logique dans des fonctions distinctes. Grâce à cette solution, nous pouvons nous concentrer uniquement sur les noms des fonctions qui décrivent ce qui s'y passe. En outre, le niveau d'abstraction a été relevé et la logique peut désormais être réutilisée. Concentrons-nous à présent sur l'appel. Il ne contient aucun détail, juste une description qui vous indique ce que fait ce code, étape par étape :
map(risesToSecondPower)
- prend chaque élément d'un tableau et l'élève à la deuxième puissance,filter(isOdd)
- filtrer et sélectionner les éléments bizarres.Programmation fonctionnelle présente de nombreux avantages. Lorsqu'il s'agit de JavaScriptL'utilisation de fonctions est naturelle car il s'agit d'un langage fonctionnel. Même les classes dans ce langage sont du "sucre syntaxique" et elles sont en dessous composées de fonctions.
En ce qui concerne la lisibilité, dans l'approche impérative, le code devient généralement une liste de noms de fonctions qui peut être lue séquentiellement sans entrer dans leur logique. Par conséquent, nous ne nous concentrons pas sur les détails de l'implémentation.
Un autre avantage est de respecter la convention des objets immuables. Grâce à cette approche, le code devient plus sûr car les références en JavaScript sont très solides et il est facile de modifier l'objet indésirable.
Dans la programmation fonctionnelle, le code est décomposé en petites fonctions qui peuvent facilement être considérées comme du code abstrait réutilisable.
Les fonctions pures constituent l'un des aspects importants de la programmation fonctionnelle. Pour créer une telle fonction, vous devez vous rappeler quelques règles :
// Fonction Inpure
let counter = 5
...
const multipleCounter = (multiplier) => {
counter = counter * multiplier
}
multiplierCompteur(2) // -> ? le résultat dépend de la valeur initiale
// Fonction pure
const multiplyBy = (multiplier) => (valeur) => valeur * multiplier
const multipleByTwo = multiplyBy(2)
const counter = multiplyByTwo(5) // -> 10
La première fonction est imprévisible car elle dépend d'un paramètre externe qui peut changer. La seconde fonction est transparente, elle ne dépend que des paramètres d'entrée, ne les modifie pas et n'utilise pas de variables hors plage. Elle est transparente car elle dépend de paramètres, ne les modifie pas, n'utilise pas de variables hors plage et renvoie une nouvelle valeur.