1. Premiers pas
2. Combinez les fonctions
3. Utilisation partielle (curry)
4. Programmation déclarative
5. Notation quintessentielle
6. Immuabilité et objets
7. Immuabilité et réseaux
8. Objectifs
9. Conclusion
Cet article est le huitième d'une série d'articles sur la programmation fonctionnelle appelée Ramda Style Thinking.
Dans les sixième et septième parties, nous avons appris à lire, mettre à jour et transformer les propriétés des objets et des éléments des tableaux dans un style déclaratif et immuable.
Ramda fournit également un outil plus général pour effectuer ces opérations, appelé lentilles. 
Quel genre de lentilles?
L'objectif combine la fonction getter et la fonction setter en un seul mécanisme. Ramda fournit un ensemble de fonctionnalités pour travailler avec des objectifs.
Nous pouvons considérer les lentilles comme quelque chose qui se concentre sur une partie spécifique d'une grande structure de données.
Comment créer une lentille?
La principale façon de créer des objectifs dans Ramda est avec la fonction objectif . lens prend une fonction getter et une fonction setter et renvoie un nouvel objectif.
 const person = { name: 'Randy', socialMedia: { github: 'randycoulman', twitter: '@randycoulman' } } const nameLens = lens(prop('name'), assoc('name')) const twitterLens = lens( path(['socialMedia', 'twitter']), assocPath(['socialMedia', 'twitter']) ) 
Ici, nous utilisons les méthodes prop et path comme fonctions assocPath , et assoc et assocPath comme fonctions assocPath .
Notez que nous avons dupliqué les arguments avec le nom de la propriété et le chemin d'accès à la propriété souhaitée pour ces fonctions. Heureusement, Ramda fournit des raccourcis intéressants pour les situations d'utilisation d'objectif les plus courantes: lensProp , lensPath et lensIndex .
- lensPropcrée une lentille qui se concentre sur une propriété d'objet
- lensPathcrée une lentille qui se concentre sur une propriété attachée d'un objet
- lensIndexcrée une lentille qui se concentre sur un élément du tableau
Nous pouvons réécrire nos objectifs ci-dessus en utilisant lensProp et lensPath :
 const nameLens = lensProp('name') const twitterLens = lensPath(['socialMedia', 'twitter']) 
C'est beaucoup plus simple et élimine les doublons. En pratique, j'ai constaté que je n'avais presque jamais besoin de la fonction d' lens origine.
Que puis-je faire avec tout ça?
D'accord, super, nous avons créé une paire de lentilles. Que pouvons-nous en faire maintenant?
Ramda propose trois fonctions d'objectif.
- la vue lit la valeur de l'objectif
- set met à jour la valeur de l'objectif
- applique plus la fonction de transformation à la lentille
 view(nameLens, person) // => 'Randy' set(twitterLens, '@randy', person) // => { // name: 'Randy', // socialMedia: { // github: 'randycoulman', // twitter: '@randy' // } // } over(nameLens, toUpper, person) // => { // name: 'RANDY', // socialMedia: { // github: 'randycoulman', // twitter: '@randycoulman' // } // } 
Notez que set et renvoyer l'objet entier avec la valeur modifiée sur laquelle votre objectif était focalisé.
Conclusion
Les lentilles peuvent être utiles si nous avons une structure de données assez complexe dont nous voulons faire abstraction lors de l'appel du code. Au lieu de fournir une structure ou des getters, setters et transformers pour chaque propriété disponible, nous pouvons fournir des lentilles à la place.
Le code client peut continuer à fonctionner avec nos structures de données grâce à l'utilisation de la view , de la set et over sans lien vers la forme exacte de la structure de données.
Suivant
Maintenant, nous connaissons Ramda beaucoup de tout ce qu'il fournit; en général, de quoi faire la plupart des opérations que nous effectuons dans nos programmes. Le dernier article de cette série donne un aperçu de ce qui a été étudié et mentionne d'autres sujets que nous pourrions souhaiter explorer par nous-mêmes.