Fermer

septembre 29, 2022

Programmation fonctionnelle en TypeScript


Voyons comment nous pouvons combiner la programmation fonctionnelle et TypeScript pour créer un logiciel hautement réutilisable et maintenable.

Apprendre un langage de programmation n’est pas facile. Un langage de programmation a de nombreux concepts et façons différentes d’accomplir quelque chose. Chaque langage de programmation est créé selon un paradigme.

Les développeurs JavaScript, la plupart du temps, ont tendance à utiliser une approche de programmation orientée objet. La programmation orientée objet est encore un paradigme largement utilisé en JavaScript, mais cela commence à changer.

Chaque jour l’adoption de programmation fonctionnelle en JavaScript augmente. La programmation fonctionnelle est un excellent moyen de créer du code réutilisable et maintenable. Il fait un usage intensif de fonctions puresévite de partager des données d’état et de mutation, etc. Avec de plus en plus de contenu sur la programmation fonctionnelle en JavaScript, son utilisation se répand dans la communauté.

Mais JavaScript n’est pas un langage de programmation fonctionnel. Nous pouvons dire que JavaScript est un langage multi-paradigme qui nous permet de faire de la programmation fonctionnelle dans certaines parties. Nous pouvons tirer parti de JavaScript et l’utiliser de manière à obtenir un code entièrement fonctionnel.

D’un autre côté, combiner la programmation fonctionnelle avec TypeScript est encore mieux. Nous combinons un code hautement réutilisable et maintenable avec des types statiques et d’excellents outils.

Aujourd’hui, nous allons expliquer comment nous pouvons combiner la programmation fonctionnelle et TypeScript pour créer des logiciels hautement réutilisables et maintenables.

Programmation fonctionnelle et TypeScript

La programmation fonctionnelle est un paradigme de programmation qui utilise des fonctions pour créer du code réutilisable et maintenable. Le code est créé en appliquant et en composant des fonctions, ce qui les rend réutilisables et maintenables dans la base de code.

Le paradigme de la programmation fonctionnelle n’est pas nouveau, il existe depuis des décennies. En fait, le premier langage de programmation a été développé dans les années 1950. En raison de sa nature, la programmation fonctionnelle gagne en popularité parmi les développeurs, en particulier les développeurs JavaScript.

TypeScript, de l’autre côté, est un sur-ensemble de JavaScript qui ajoute des types statiques à votre code et aide à détecter les erreurs tôt dans votre éditeur. Il offre un excellent outillage et assure la sécurité de votre code, vous aidant à éviter de faire des erreurs stupides et de casser des choses.

Lorsque nous combinons un excellent paradigme de programmation avec Manuscrit, on peut se retrouver avec une combinaison puissante et sûre. Nous pouvons créer du code réutilisable et maintenable qui est de type sécurisé.

Maintenant, approfondissons et commençons à combiner la programmation fonctionnelle et TypeScript pour voir à quel point il est puissant.

Une combinaison puissante

Fonctions pures

Les fonctions pures sont des fonctions qui, étant donné une entrée spécifique, renverront toujours la même sortie. Une fonction pure est conçue pour ne provoquer aucun effet secondaire. On peut comprendre ici un effet de bord comme une modification d’un objet, la réaffectation d’une valeur, etc.

Les fonctions pures sont l’un des piliers de la programmation fonctionnelle. La programmation fonctionnelle nous oblige à écrire des fonctions pures et déterministes.

Une simple fonction pure qui somme deux nombres ressemblerait à ceci :

const sum = (a: number, b: number): number => a + b;

Une grande partie de la création de fonctions pures avec TypeScript consiste à transmettre les types corrects pour les arguments de la fonction et la sortie de la fonction.

Bien que TypeScript n’ait toujours pas de moyen de s’assurer pleinement qu’une fonction est pure (il y a une discussion sur l’ajout d’un mot-clé pur pour gérer les fonctions pures), nous pouvons nous assurer que nous avons une fonction pure lorsque :

  • Nous avons une fonction qui renvoie la même sortie étant donné une entrée.
  • Il ne modifie aucune donnée.
  • Il ne crée aucun effet secondaire.

L’utilisation de fonctions pures avec TypeScript peut améliorer notre code. Les fonctions pures sont parfaites pour créer maintenable, code réutilisable et testable. Nous pouvons simuler et prédire le comportement d’une fonction pure, ce qui facilite la prévisibilité. Comme il ne crée aucun effet secondaire, nous pouvons nous assurer que le résultat sera celui attendu.

Fonctions d’ordre supérieur

Une fonction d’ordre supérieur est une fonction qui reçoit une autre fonction en tant que paramètre ou renvoie une fonction en tant que valeur de retour. Elles sont dites « d’ordre supérieur » car ce sont des fonctions qui opèrent sur d’autres fonctions.

Ils nous permettent de combiner des fonctions simples de manière sophistiquée. Les fonctions d’ordre supérieur sont un autre concept très important dans le paradigme de la programmation fonctionnelle.

const greaterThan = (n: number) => {
  return (x: number) => x > n;
};

const greaterThanTwo = greaterThan(10);

Nous avons créé une fonction qui reçoit un nombre et compare si le nombre passé est supérieur à l’autre nombre. Nous pouvons utiliser TypeScript pour nous assurer que chaque paramètre de notre fonction reçoit le type respectif.

Un autre excellent moyen de créer des fonctions d’ordre élevé à l’aide de TypeScript consiste à utiliser génériques. Les génériques nous permettent de créer des fonctions réutilisables en utilisant une variété de types.

Par exemple, imaginons que nous allons créer une fonction qui renvoie une autre fonction, qui divise deux nombres. Son complexe? Il est facile d’accomplir cela avec TypeScript et la programmation fonctionnelle, jetez un œil :

type MyFunc<T> = (s: T) => (c: number) => number;

const genericFunc: MyFunc<number> = (n: number) => (c: number) => n / c;

Fonction Composition

La programmation fonctionnelle est un paradigme de programmation qui utilise des fonctions pures. Le code est créé en appliquant et en composant des fonctions, il est donc très important de savoir comment composer des fonctions.

Les fonctions pures ne peuvent pas accéder aux données externes par définition, elles sont donc faciles à composer et à réutiliser dans le code.

La canalisation est un processus qui renvoie la sortie d’une fonction et la transmet à une autre fonction. Cela crée une chaîne de fonctions, quelque chose comme ceci :

result = input -> firstFunction -> secondFunction -> thirdFunction

De nombreux langages de programmation ont ce qu’on appelle le tuyau opérateur. Il facilite la composition de nombreuses fonctions. Le tuyau prend le résultat à gauche et le passe à droite. Voici un exemple de la façon dont le opérateur de tuyauterie fonctionne dans Elixir:

result() 
  |> firstFunction() 
  |> secondFunction() 
  |> thirdFunction()

Contrairement à de nombreux langages de programmation fonctionnels, JavaScript ne (encore) ont l’opérateur de pipe, et essayer d’implémenter la pipe en JavaScript peut facilement devenir moche. Regardez comme il est difficile de comprendre réellement ce qui se passe dans ce code :

const result = firstFunction(secondFunction(thirdFunction(input)));

Voici comment nous pouvons implémenter la composition de fonctions à l’aide de TypeScript :

const sum = (n: number) => n + 10;
const double = (n: number) => n * 2;
const divide = (n: number) => n / 2;

Ce code n’est toujours pas assez bon. Ce que nous pouvons faire maintenant, c’est créer un fonction d’ordre supérieur qui prend de nombreuses fonctions et renvoie une seule fonction qui les combine toutes. Nous allons utiliser la méthode reduce pour cela, et voici comment cela va fonctionner :

const combine = (result, nextFun) => nextFun(result);

const pipe = (...fns) => x => fns.reduce(combine, x);

Maintenant, nous pouvons créer une meilleure composition de fonctions en passant simplement toutes les fonctions que nous voulons et les arguments dont nous avons besoin, comme ceci :

const result = pipe(sum, double, divide)(10);

Conclusion

JavaScript est le langage de programmation le plus populaire au monde. Nous pouvons créer n’importe quoi en l’utilisant, des applications Web simples aux API complexes et aux services Web.

TypeScript est un sur-ensemble de JavaScript qui ajoute de la sécurité à notre code en utilisant des types statiques. Tirer parti de l’utilisation de JavaScript avec TypeScript et de la programmation fonctionnelle peut créer une combinaison puissante. Nous pouvons créer des applications robustes en utilisant TypeScript et la programmation fonctionnelle, avec un code réutilisable et testable.




Source link

septembre 29, 2022