JavaScript Fonctions pures


Exemple

Un principe de base de la programmation fonctionnelle est qu’elle évite de changer l’état de l’application (état d’apatridie) et les variables en dehors de sa portée (immuabilité).

Les fonctions pures sont des fonctions qui:

  • avec une entrée donnée, retourne toujours la même sortie
  • ils ne s'appuient sur aucune variable en dehors de leur champ d'application
  • ils ne modifient pas l'état de l'application ( pas d'effets secondaires )

Jetons un coup d'oeil à quelques exemples:


Les fonctions pures ne doivent changer aucune variable en dehors de leur portée

Fonction impure

let obj = { a: 0 }

const impure = (input) => {
  // Modifies input.a
  input.a = input.a + 1;
  return input.a;
}

let b = impure(obj)
console.log(obj) // Logs { "a": 1 }
console.log(b) // Logs 1

La fonction a modifié la valeur obj.a qui est hors de sa portée.

Fonction pure

let obj = { a: 0 }

const pure = (input) => {
  // Does not modify obj
  let output = input.a + 1;
  return output;
}

let b = pure(obj)
console.log(obj) // Logs { "a": 0 }
console.log(b) // Logs 1

La fonction n'a pas changé les valeurs d' obj objet


Les fonctions pures ne doivent pas s'appuyer sur des variables hors de leur portée

Fonction impure

let a = 1;

let impure = (input) => {
  // Multiply with variable outside function scope
  let output = input * a;
  return output;
}

console.log(impure(2)) // Logs 2
a++; // a becomes equal to 2
console.log(impure(2)) // Logs 4

Cette fonction impure repose sur la variable a définie en dehors de sa portée. Donc, si un est modifié, le résultat de la fonction impure sera différent.

Fonction pure

let pure = (input) => {
  let a = 1;
  // Multiply with variable inside function scope
  let output = input * a;
  return output;
}

console.log(pure(2)) // Logs 2

Le résultat de la fonction pure ne repose sur aucune variable en dehors de sa portée.