Typoskript-Pipeline-Betreiber

Verkettete Funktionsaufrufe in Typescript schreiben

Zeit für einen neuen Betreiber

Wenn Sie die Funktionen von Typescript häufig verwenden, haben Sie möglicherweise den Wunsch verspürt, Ihren Code besser zu schreiben, wenn einige Funktionen miteinander verkettet sind. Hier ist ein Beispiel dafür, was ich damit meine.

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")));

Das Hauptproblem besteht darin, dass Sie Ihr mentales Modell der Hierarchie von Funktionsaufrufen an die Spezifikation von Typescript anpassen müssen. Insbesondere nimmt jede Funktion einen anderen Rückgabewert einer Funktion als Eingabe, was zu Code führt, bei dem der ursprüngliche Eingabewert am rechten Rand platziert wird.

Dies ist auf keinen Fall ein Problem. Der Code funktioniert einwandfrei, und sobald Sie sich an die Syntax einer Programmiersprache gewöhnt haben, fühlen sich solche Konstrukte natürlich an.

Was der Pipelinebetreiber anders macht

Durch die Verwendung des neuen und derzeit experimentellen Pipeline-Operators ermöglicht Ihnen Typescript, solche verketteten Funktionsaufrufe von links nach rechts zu schreiben, wobei die ursprüngliche Eingabe jetzt am linken Rand steht.

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;

Die vorgeschlagene Syntax ist meiner Meinung nach sehr anfängerfreundlich, da sie sich eher wie menschliche Sprache liest. Und durch die Vermeidung der verschachtelten Funktionsaufrufe ist der Codestil insgesamt sauberer und lesbarer.

Schritt für Schritt

Zum Schreiben befinden sich die Dinge noch in einer sehr frühen Entwicklung. Das vorgeschlagene Feature sollte nicht in irgendeiner Art von Produktionscode verwendet werden, sondern nur für ein kleines Nebenprojekt zum Herumspielen. Für einen schnellen Start unterstützt Firefox die Syntax nativ, nachdem das Feature-Flag „--enable-pipeline-operator“ gesetzt wurde. Es gibt auch ein Babel-Plugin.

Es sind noch einige Fragen offen, beispielsweise wie asynchrone Funktionsaufrufe in einer Funktionskette mit dem new-Operator behandelt werden. Diese Funktion sieht jedoch sehr aufregend aus, auch wenn sie keine wesentlichen neuen Funktionen mit sich bringt. Die vorgeschlagene Syntax sieht wirklich gut aus und ich bin gespannt auf den endgültigen Entwurf des Typescript-Teams.