0Pricing
TypeScript Academy · درس

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

ركّب الدوال مع الحفاظ على مجموعات المعاملات وأنواع الإرجاع، واكتب دوال مساعدة لـ pipe/compose تظل آمنة من ناحية الأنواع.

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

مقدمة

الهدف: تركيب الدوال من دون فقدان معلومات المعاملات. تتيح لكم tuples متغيرة الطول الحفاظ على مجموعة المعاملات args tuple كاملةً عبر مساعدات pipe/compose.

  • الحفاظ على عدد المعاملات وأسمائها
  • الحفاظ على الاستنتاج عبر الخطوات
  • من دون any أو تحويلات قسرية

التركيب الأساسي

compose: تأخذ الدالة الأولى جميع المعاملات (...args: A)، بينما تستهلك الدالة الثانية مخرجها؛ ويُحافَظ على عدد المعاملات والأنواع.

function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
  return (...args: A): C => g(f(...args))
}

function toLen(a: string, n: number) { return `${a}${n}`.length }
function isEven(x: number) { return x % 2 === 0 }

const c1 = compose(isEven, toLen)
const ok = c1("id", 99)   // boolean

مساعد pipe

ينفّذ pipe الفكرة نفسها بترتيب عكسي؛ ويكون تدفق الاستنتاج أكثر سهولة.

function pipe<A extends any[], B, C>(f: (...args: A) => B, g: (b: B) => C) {
  return (...args: A): C => g(f(...args))
}

const p1 = pipe(toLen, isEven)
const ok2 = p1("xx", 7) // boolean

تركيب 3 دوال فأكثر

لثلاث دوال أو أكثر: يُكرَّر النمط نفسه؛ وتُحفظ مجموعة A، وتُسلسل قيم الإرجاع الوسيطة.

function compose3<A extends any[], B, C, D>(h: (c: C) => D, g: (b: B) => C, f: (...args: A) => B) {
  return (...args: A): D => h(g(f(...args)))
}

function toUpper(s: string) { return s.toUpperCase() }

const c3 = compose3(toUpper, (x: number) => x.toString(), toLen)
const val = c3("a", 5) // "2" → then upper → "2"

ربط معاملات البداية

bindHead: يثبّت المعاملات الكاملة وينشئ دالة بلا معاملات؛ وهذا لأغراض العرض فقط (مع أنه يمكن جعلها أكثر مرونة باستخدام Parameters).

function bindHead<A extends any[], B>(fn: (...args: A) => B, ...head: A) {
  return (...rest: []): B => fn(...head)
}

const bh = bindHead(toLen, "x", 42)
const r = bh() // number

نصائح

نصائح:

تجنبوا any في المساعدات؛ فهو يقطع سلسلة الاستنتاج.

إذا لزم الأمر، اجعلوا نوع الإرجاع صريحًا؛ فهذا يحسّن تجربة المطوّر.

عند التركيب على مراحل متعددة، اختاروا مساعدين صغارًا بدلًا من مساعدين عامين أكثر من اللازم.

التحقق من توقيع compose

تحقق سريع: أي توقيع لـ compose يحافظ على مجموعة معاملات المصدر؟

مراجعة

مراجعة: كتبتم compose/pipe مع الحفاظ على المعاملات باستخدام tuples متغيرة الطول؛ وبذلك أُنشئ التدفق من دون فقدان عدد المعاملات والأنواع.

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

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

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

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

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

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

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

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

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

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

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

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

  1. عناصر rest في المجموعات وأنواع curry
  2. تركيب الدوال والمعاملات بأمان
  3. المنشئات ذات الكتابة القوية
← العودة إلى TypeScript Academy