Opérateur de pipeline tapuscrit

Écrire des appels de fonction chaînés dans Typescript

Temps pour un nouvel opérateur

Si vous utilisez beaucoup les fonctions de Typescript, vous avez peut-être ressenti le désir de mieux écrire votre code lorsque certaines fonctions sont enchaînées. Voici un exemple de ce que je veux dire par là.

const scream = (s: string) => s + "!";
const quote = (s: string) => `"${s}"`;
cosnt toUpperCase = (s: string) => s.toUpperCase();

// The first function that executes is
// 'toUpperCase', whose results is proved
// to 'scream', which in turn returns to
// 'quote', which returns the final string
//
// "HELLO WORLD!"
const text = quote(scream(toUpperCase("Hello World")));

Le problème principal est que vous devez adapter votre modèle mental de la hiérarchie des appels de fonction à la spécification de Typescript. Plus précisément, chaque fonction prend une autre valeur de retour de fonction en entrée, ce qui entraîne un code où la valeur d'entrée d'origine est placée sur le bord droit.

Ce n'est en aucun cas un problème. Le code fonctionne très bien, et une fois que vous vous êtes habitué à la syntaxe d'un langage de programmation, de telles constructions commencent à vous sembler naturelles.

Ce que l'exploitant du pipeline fait différemment

En utilisant le nouvel opérateur de pipeline actuellement expérimental, Typescript vous permet d'écrire de tels appels de fonction chaînés de gauche à droite, où l'entrée d'origine est maintenant sur le bord gauche.

const scream = (s: string) => s + "!";
const quote = (s: string) => `"${s}"`;
cosnt toUpperCase = (s: string) => s.toUpperCase();

// And here's the new sytanx, starting
// from left and movign throught the 
// call chain to the right.
// 
// It's immediately better to read and
// self explanatory, imho.
"Hello World" |> toUpperCase |> scream |> quote;

La syntaxe proposée est à mon avis très conviviale pour les débutants, car elle se lit plutôt comme un langage humain. Et en évitant les appels de fonction imbriqués, le style de code est globalement plus propre et plus lisible.

Pas à pas

Au moment de la rédaction, les choses sont encore au tout début de leur développement. La fonctionnalité proposée ne doit être utilisée dans aucune sorte de code de production, mais uniquement pour un petit projet parallèle avec lequel jouer. Pour un démarrage rapide, Firefox prend en charge la syntaxe nativement après avoir défini l'indicateur de fonctionnalité "--enable-pipeline-operator". Un plugin babel est également disponible.

Il reste encore des questions ouvertes, par exemple comment gérer les appels de fonction asynchrones dans une chaîne de fonctions à l'aide de l'opérateur new. Pourtant, cette fonctionnalité semble très excitante, même si elle n'apportera pas de nouvelles fonctionnalités substantielles. La syntaxe proposée semble vraiment bonne et j'attends avec impatience le projet final de l'équipe Typescript.