Photo by Joan Gamell on Unsplash

Comment éviter null et undefined avec Maybe et Result en javascript

Il existe beaucoup d’outils, de fonctions et de techniques pour évaluer si une variable existe, si elle est bien définie et si elle n’est pas nulle. En travaillant sur un projet suivant le paradigme de la programmation fonctionnelle, j’en ai pratiqué un qui mérite une attention toute particulière.

Cas 1 : Le champ facultatif

Je souhaite tester dans mon Backend le contenu d’un champ de formulaire non obligatoire provenant du front.

  • Just() : une valeur
// maVariable est une variable provenant du formulaire

maVariable.matchWith({
Nothing : () => queFaireSiAucuneValeur(),
Just : valeur => traitementAAppliquer(valeur.value)
});
// maVariable contient un Maybe.Nothing()

maVariable.isJust //false
maVariable.isNothing //true

Cas 2 : Le résultat d’une requête à la BDD

Je souhaite évaluer le résultat d’une requête à la base de données et je peux avoir : soit un résultat, soit une erreur.

  • Ok() : pour contenir le résultat
maVariable.matchwith({
Error: err => fonctionDeGestionErreur(err.value),
Ok: resultat => traitementAAppliquer(resultat.value)
});

Exemples pratiques

Pour mettre en oeuvre ces exemples, il faut créer un projet node.js à l’aide de NPM :

  1. Dans ce répertoire lancer la commande npm init
  2. Suivre l’assistant
  3. Installer Folktale : npm install --save folktale
  4. Ouvrir index.js dans un éditeur

Exemple avec Maybe()

const Maybe = require('folktale/Maybe');

// const variable = Maybe.Nothing();
const variable = Maybe.Just('super valeur');

variable.matchWith({
Nothing: () => console.log('Aucune valeur'),
Just: (valeur) => console.log('La valeur est : ' + valeur.value),
});

Exemple avec Result()

const Result = require('folktale/Result');

// const variable = Result.Error("ceci est une erreur");
const variable = Result.Ok("Le résultat attendu");

variable.matchWith({
Error: err => console.log(err.value),
Ok: valeur => console.log('La valeur est : ' + valeur.value),
});

Conclusion

Avec ces méthodes je n’ai pas eu à faire à des valeurs undefined ou null. Cela nécessite un travail préparatoire lors de la définition des valeurs ou des fonctions de récupération de données, mais au final quel confort d’usage !

Product guy who likes technology, Apple, apps, gadgets and cats

Product guy who likes technology, Apple, apps, gadgets and cats