Implementations and practical examples

Photo by JJ Ying on Unsplash

Introduction

We want to specialize a JavaScript function of fixed arity by transforming it first into a composition of functions of lower arities.

const fn = (p1, p2, ..., pN) => f(p1, p2, ..., pN);

In its simplest form, this problem consists of transforming this function into a new function of the following form:

const curried = p1 => (p2, ..., pN) => fn(p1, p2, ..., pN);

We can also generalize this process to get the following form:

const curried = p1 => p2 => ... => pN => fn(p1, p2, ..., pN);


How to optimize a function by avoiding computing the same things several times

Photo by Shiro hatori on Unsplash

Memoization is a technique for storing values returned by a function to avoid having to redo computations that have already been performed previously.

A simple example

A naive implementation of a function that returns the nth number in the Fibonacci…


Comment optimiser les performances d’une fonction en évitant de calculer plusieurs fois la même chose

Photo by Shiro hatori on Unsplash

La mémoïsation est une technique permettant de mémoriser les valeurs retournées par une fonction pour éviter d’avoir à refaire des calculs qui auraient déjà été réalisés précédemment.


Implémentations et exemples pratiques

Photo by JJ Ying on Unsplash

Introduction

Nous souhaitons spécialiser une fonction JavaScript à plusieurs paramètres en la transformant d’abord en une composition de fonctions d’arités inférieures.

const fn = (p1, p2, ..., pN) => f(p1, p2, ..., pN);

Dans sa forme la plus simple, ce problème consiste à transformer cette fonction en une nouvelle fonction de la forme suivante :

const curried = p1 => (p2, ..., pN) => fn(p1, p2, ..., pN);

Nous pouvons également généraliser ce processus pour obtenir la forme suivante :

const curried = p1 => p2 => ... =>…


Et une façon astucieuse de le faire de façon concise

Photo by Anastasia Dulgier on Unsplash

Problème

Nous souhaitons extraire une méthode prototypique pour pouvoir la réutiliser de façon fonctionnelle, éventuellement sur d’autres types d’objets.

const myFunction = fromMethod(MyClass.prototype.myMethod);
myFunction(obj, ...args);

Il s’agit là d’implémenter une fonction fromMethod de telle sorte que nous puissions appeler la fonction myFunction comme nous le faisons dans la deuxième ligne, c’est-à-dire :

  • en lui passant en premier argument l’objet obj sur lequel nous souhaitons appliquer la fonction.
  • en lui passant ensuite une liste d’arguments correspondant à la signature de la méthode originale.

Ainsi, tout se passe comme si nous avions fait obj.myMethod(...args)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store