0Pricing
TypeScript Academy · درس

تركيب الدوال مع الأنواع

ركّبوا الدوال مع الحفاظ على الأمان النوعي

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

ما تركيب الدوال؟

يجمع تركيب الدوال الدوال الصغيرة في دالة أكبر. وينتج compose(f, g) دالةً تطبّق g أولًا، ثم تمرّر النتيجة إلى f.

التعريف الأساسي

رياضيًا، compose(f, g)(x) = f(g(x)). تُنفّذ الدوال من اليمين إلى اليسار؛ إذ تُنفّذ الدالة الموجودة في أقصى اليمين أولًا.

const compose = (f: (n: number) => number, g: (n: number) => number) =>
  (x: number) => f(g(x));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
console.log(compose(inc, dbl)(5)); // 11 (5*2 then +1)

الترتيب من اليمين إلى اليسار

الترتيب مهم. فالتعبير compose(inc, dbl) يضاعف القيمة أولًا ثم يزيدها، بينما يزيد التعبير compose(dbl, inc) القيمة أولًا. اقرأ تركيب الدوال من الداخل إلى الخارج.

console.log(compose(dbl, inc)(5)); // 12 (5+1 then *2)

كتابة أنواع تركيب الدوال باستخدام الأنواع العامة

تسمح الأنواع العامة باختلاف نوعَي الإدخال والإخراج. إذ تحوّل g النوع A إلى B، وتحول f النوع B إلى C، بينما تحوّل النتيجة النوع A إلى C.

function compose<A, B, C>(f: (b: B) => C, g: (a: A) => B): (a: A) => C {
  return a => f(g(a));
}

تغيير الأنواع أثناء التنفيذ

بما أن سلسلة الأنواع العامة هي A -> B -> C، يمكن لتركيب الدوال تحويل القيمة عبر عدة أشكال، مثل تحويل سلسلة نصية إلى رقم ثم إلى سلسلة نصية.

const length = (s: string) => s.length;
const toStr = (n: number) => "len=" + n;
const describe = compose(toStr, length);
console.log(describe("hello")); // len=5

يجب أن يتطابق النوع عند نقطة الربط

يجب أن يطابق ناتج g مدخل f. وإذا اختلفا، يرفض المترجم تركيب الدوال، فيكتشف أخطاء التوصيل مبكرًا.

// compose(length, toStr) would error:
// toStr returns string, length expects string -> ok here,
// but mismatched pairs are flagged by the compiler.

تركيب ثلاث دوال

يمكن تداخل عمليات تركيب الدوال أو كتابة إصدار يقبل ثلاثة معاملات. وتظل قاعدة التنفيذ من اليمين إلى اليسار سارية في جميع الحالات.

const compose3 = <A, B, C, D>(
  f: (c: C) => D, g: (b: B) => C, h: (a: A) => B
) => (a: A): D => f(g(h(a)));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
const neg = (n: number) => -n;
console.log(compose3(neg, dbl, inc)(3)); // -8

ينشئ تركيب الدوال مسارات معالجة

من خلال تركيب دوال صغيرة ونقية، يمكنك تجميع تحويلات معقدة بطريقة تصريحية. وتظل كل قطعة قابلة للاختبار بمعزل عن غيرها.

const trim = (s: string) => s.trim();
const upper = (s: string) => s.toUpperCase();
const clean = compose(upper, trim);
console.log(clean("  hi ")); // HI

لماذا تُعد الدوال النقية الأفضل للتركيب؟

يفترض التركيب أن كل دالة تعتمد على مدخلها فقط. وتضمن الدوال النقية ذلك، لذا ينتج عن تركيبها دالة نقية أخرى يمكن التنبؤ بسلوكها.

compose مقابل pipe

ينفّذ compose الدوال من اليمين إلى اليسار، ويحاكي الترميز الرياضي. ويفضّل كثيرون القراءة من اليسار إلى اليمين، وهو ما يوفّره pipe، وسنتناوله في الدرس التالي.

حافظ على صِغر الأجزاء

يظهر أثر تركيب الدوال بأفضل صورة عندما تؤدي كل دالة مهمة صغيرة واحدة. وتجعل الخطوات الصغيرة، المسماة بوضوح والنقية، مسار المعالجة المركّب موضحًا لذاته وسهل إعادة الترتيب.

اختبار سريع

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

خلاصة

compose(f, g)(x) = f(g(x))، ويُنفّذ من اليمين إلى اليسار. وتربط كتابة الأنواع العامة A -> B -> C، لذلك يجب أن يطابق ناتج g مدخل f، مما يتيح للمترجم التحقق من مسار الدوال الصغيرة النقية.

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

هل درس «تركيب الدوال مع الأنواع» مجاني؟

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

ماذا ستتعلم في «تركيب الدوال مع الأنواع»؟

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

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

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

كم من الوقت يستغرق درس «تركيب الدوال مع الأنواع»؟

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

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

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

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

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