TypeScript Academy · درس

أدوات pipe وflow محددة الأنواع

ابنوا مسارات من اليسار إلى اليمين مع استنتاج دقيق

الدرس 4 من 413 خطوة

أدوات pipe وflow محددة الأنواع درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

من compose إلى pipe

يمرّر pipe القيمة عبر الدوال من اليسار إلى اليمين، وهو ترتيب القراءة الذي يفضّله معظم الناس. ويعني pipe(x, f, g) التعبير g(f(x)).

‏pipe بخطوتين

يأخذ أبسط مسار pipe قيمةً ودالةً واحدة، ثم يعيد النتيجة. وتتطابق القراءة من الأعلى إلى الأسفل مع ترتيب التنفيذ.

const pipe2 = <A, B>(a: A, f: (a: A) => B): B => f(a);
console.log(pipe2(5, n => n + 1)); // 6

تمرير القيمة عبر عدة دوال

يطبّق مسار يقبل ثلاثة معاملات الدوال بالتتابع. ويصبح ناتج كل خطوة مدخل الخطوة التالية.

function pipe<A, B, C>(a: A, f: (a: A) => B, g: (b: B) => C): C {
  return g(f(a));
}
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
console.log(pipe(5, inc, dbl)); // 12

القراءة من اليسار إلى اليمين

على عكس compose، يسرد pipe الخطوات بالترتيب الذي تُنفّذ به. فالتعبير pipe(5, inc, dbl) يزيد القيمة أولًا ثم يضاعفها، تمامًا كما كُتب.

console.log(pipe(5, dbl, inc)); // 11 (double then inc)

لماذا نحتاج إلى التحميل الزائد؟

تمرّر مواضع الاستدعاء المختلفة أعدادًا مختلفة من الدوال. ولتحديد نوع كل عدد من المعاملات بدقة، يستخدم pipe تواقيع التحميل الزائد، توقيعًا واحدًا لكل طول مدعوم.

function pipe<A, B>(a: A, f: (a: A) => B): B;
function pipe<A, B, C>(a: A, f: (a: A) => B, g: (b: B) => C): C;
function pipe(a: unknown, ...fns: Function[]): unknown {
  return fns.reduce((v, fn) => fn(v), a);
}

يربط كل تحميل زائد الأنواع

يربط التحميل الزائد ذي الدالتين النوعين A -> B، بينما يربط التحميل الزائد ذي الثلاث دوال الأنواع A -> B -> C. ويختار المترجم التحميل الزائد المطابق استنادًا إلى عدد الدوال التي تمرّرها.

التنفيذ وقت التشغيل

تطبّق عملية reduce واحدة كل دالة بالتتابع أسفل تواقيع التحميل الزائد. ويستخدم توقيع التنفيذ أنواعًا عامة غير دقيقة، بينما يرى المستدعون تواقيع التحميل الزائد الدقيقة.

function pipe(a: any, ...fns: Array<(x: any) => any>): any {
  return fns.reduce((acc, fn) => fn(acc), a);
}
console.log(pipe("  hi ", s => s.trim(), s => s.toUpperCase())); // HI

تغيّر الأنواع عبر مسار pipe

بما أن كل تحميل زائد يربط الأنواع العامة، يمكن لمسار pipe تحويل قيمة عبر عدة أنواع مع بقائها خاضعة للتحقق الكامل من الأنواع.

const out = pipe("hello", s => s.length, n => n > 3);
console.log(out); // true (string -> number -> boolean)

‏flow: pipe من دون القيمة

يشبه flow ‏pipe، لكنه يأخذ الدوال فقط ويعيد دالةً جديدة. وتزوّده بالقيمة لاحقًا، وهذا مناسب جدًا لإعادة الاستخدام.

const flow = <A, B, C>(f: (a: A) => B, g: (b: B) => C) =>
  (a: A): C => g(f(a));
const process = flow((n: number) => n + 1, (n: number) => n * 2);
console.log(process(5)); // 12

‏pipe مقابل flow مقابل compose

يطبّق pipe الدوال على قيمة من اليسار إلى اليمين؛ وينشئ flow دالةً قابلة لإعادة الاستخدام من اليسار إلى اليمين؛ بينما ينشئ compose دالةً من اليمين إلى اليسار. اختر ما يناسب ترتيب القراءة وإمكانية إعادة الاستخدام.

مسارات معالجة عملية

توفر مكتبات مثل fp-ts وEffect دالة pipe قوية ومكتوبة بالكامل، مع العديد من تواقيع التحميل الزائد. ويساعدك بناء مسار صغير بنفسك على فهم كيفية عمل كتابة الأنواع بدقة.

اختبار سريع

اختبار سريع حول هذا الدرس.

خلاصة

ينفّذ pipe(x, f, g) = g(f(x)) من اليسار إلى اليمين، ويستخدم تواقيع التحميل الزائد لتحديد نوع كل عدد من المعاملات بدقة، مع تنفيذ واحد يعتمد على reduce. أما flow فهو الإصدار الخالي من القيمة الذي يعيد دالةً قابلة لإعادة الاستخدام.

البدء مجانًا

تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
101
الدروس
352

الأسئلة الشائعة

هل درس «أدوات pipe وflow محددة الأنواع» مجاني؟

نعم — نص درس «أدوات pipe وflow محددة الأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «أدوات pipe وflow محددة الأنواع»؟

ابنوا مسارات من اليسار إلى اليمين مع استنتاج دقيق تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أدوات pipe وflow محددة الأنواع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال النقية وعدم القابلية للتغيير
  2. التعميم والتطبيق الجزئي
  3. تركيب الدوال مع الأنواع
  4. أدوات pipe وflow محددة الأنواع
← العودة إلى TypeScript Academy