מפעיל צינור כתיבה

כתוב שיחות פונקציה משורשרות ב- Typescript

הגיע הזמן למפעיל חדש

אם אתה משתמש בפונקציות של Typescript הרבה, ייתכן שהרגשת את הרצון לכתוב טוב יותר את הקוד שלך כאשר כמה פונקציות משולבות יחד. הנה דוגמה למה אני מתכוון בכך.

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

הבעיה העיקרית היא שעליך להתאים את המודל הנפשי שלך להיררכיית שיחות הפונקציה למפרט של Typescript. באופן ספציפי, כל פונקציה לוקחת פונקציות אחרות להחזיר ערך כקלט, מה שמביא לקוד שבו ערך הקלט המקורי ממוקם בקצה הימני.

זו לא בעיה בשום אופן. הקוד עובד בסדר גמור, וברגע שהתרגלתם לתחביר של שפת תכנות, מבנים כאלה מתחילים להרגיש טבעיים.

מה מפעיל הצינור עושה אחרת

על ידי שימוש במפעיל הצינור החדש והניסיוני הנוכחי, Typescript מאפשר לך לכתוב שיחות פונקציה משורשרות כאלה משמאל לימין, כאשר הקלט המקורי נמצא כעת בקצה השמאלי.

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;

התחביר המוצע הוא ידידותי מאוד למתחילים לדעתי, מכיוון שהוא קורא יותר כמו שפה אנושית. ועל ידי הימנעות משיחות הפונקציה המקוננות, סגנון הקוד הכללי נקי וקריא יותר.

צעד אחר צעד

נכון לכתיבת הדברים, הדברים עדיין נמצאים בהתפתחות מוקדמת מאוד. אין להשתמש בתכונה המוצעת בשום סוג של קוד ייצור, אלא רק עבור פרויקט צדדי קטן שאפשר לשחק איתו. להתחלה מהירה, Firefox תומך בתחביר באופן מקורי לאחר הגדרת דגל התכונה "- מפעיל צינור פעיל". יש גם תוסף בבל זמין.

יש עדיין כמה שאלות פתוחות, למשל כיצד לטפל בשיחות פונקציות async בשרשרת פונקציות באמצעות המפעיל החדש. עם זאת תכונה זו נראית מרגשת מאוד, למרות שהיא לא תביא שום תכונות חדשות מהותיות. התחביר המוצע נראה ממש טוב ואני להוט לחכות לטיוטה הסופית של צוות Typescript.