عامل تشغيل خط الأنابيب المطبوع

اكتب استدعاءات الدوال المتسلسلة في كتابي

حان الوقت لمشغل جديد

إذا كنت تستخدم وظائف 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 بناء الجملة أصليًا بعد تعيين علامة الميزة "--enable-pipeline-worker". يتوفر أيضًا مكون إضافي babel.

لا تزال هناك بعض الأسئلة المفتوحة ، على سبيل المثال كيفية التعامل مع استدعاءات الوظائف غير المتزامنة في سلسلة من الوظائف باستخدام عامل التشغيل الجديد. ومع ذلك ، تبدو هذه الميزة مثيرة للغاية ، على الرغم من أنها لن تجلب أي ميزات جديدة جوهرية. تبدو البنية المقترحة جيدة حقًا وأنا حريص على انتظار المسودة النهائية من قِبل فريق Typescript.

الاقتراحات

ذات صلة

ملحق

اللغات