Gépírásos csővezeték-kezelő

Láncolt függvényhívásokat írjon gépírásba

Ideje egy új üzemeltetőnek

Ha sokat használja a Typescript függvényeit, akkor érezhette azt a vágyat, hogy jobban kiírja a kódot, amikor egyes funkciók össze vannak kapcsolva. Itt van egy példa arra, hogy mit akarok ezzel mondani.

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

A fő probléma az, hogy a függvényhívások hierarchiájának mentális modelljét a Typescript specifikációihoz kell igazítania. Pontosabban, minden egyes funkció egy másik függvény visszatérési értékét veszi bemenetként, ami azt a kódot eredményezi, ahol az eredeti bemeneti érték a jobb szélen helyezkedik el.

Ez semmi esetre sem jelent problémát. A kód remekül működik, és ha már megszokta a programozási nyelv szintaxisát, az ilyen konstrukciók természetesnek tűnnek.

Amit a csővezeték üzemeltetője másképp csinál

Az új és jelenleg kísérleti csővezeték-operátor használatával a Typescript lehetővé teszi az ilyen láncolt függvényhívások írását balról jobbra, ahol az eredeti bemenet most a bal szélén van.

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;

A javasolt szintaxis véleményem szerint nagyon kezdőbarát, mivel inkább az emberi nyelvet olvassa. A beágyazott függvényhívások elkerülésével a kódstílus összességében tisztább és olvashatóbb.

Lépésről lépésre

Az írás során a dolgok még mindig nagyon korai fejlesztés alatt állnak. A javasolt funkciót nem szabad használni semmiféle gyártási kódban, hanem csak egy kis mellékprojekt számára, amellyel körül lehet játszani. A gyors indítás érdekében a Firefox natív módon támogatja a szintaxist, miután beállította a „--enable-pipeline-operator” funkciózászlót. Van egy babel-plugin is.

Még mindig vannak nyitott kérdések, például az aszinkron függvényhívások kezelése egy függvényláncban az új operátor használatával. Ez a funkció mégis nagyon izgalmasnak tűnik, annak ellenére, hogy nem hoz lényeges új funkciókat. A javasolt szintaxis nagyon jól néz ki, és alig várom, hogy megvárjam a Typescript csapat végleges tervezetét.