0Pricing
TypeScript Academy · درس

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

حدّدوا أنواع الدوال التي تقبل أي عدد من الوسائط

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

الدوال ذات الوسائط الكثيرة

تتيح معاملات rest للدالة قبول أي عدد من الوسائط، وجمعها في مصفوفة واحدة. ويحدد TypeScript نوع تلك المصفوفة، ما يمنحك الأمان حتى مع الاستدعاءات ذات الأطوال المتغيرة.

معامل rest الأساسي

ضع ... قبل المعامل الأخير وحدد له نوع مصفوفة. وداخل الدالة، يتصرف هذا المعامل كمصفوفة عادية.

function sum(...nums: number[]): number {
  return nums.reduce((a, b) => a + b, 0)
}
console.log(sum(1, 2, 3, 4)) // 10

الاستدعاء من دون وسائط

يمكن لمعامل rest مطابقة صفر من الوسائط، فتكون المصفوفة فارغة ببساطة. ولا يلزم أي تعامل خاص مع حالة عدم وجود الوسائط.

function sum(...nums: number[]): number {
  return nums.reduce((a, b) => a + b, 0)
}
console.log(sum()) // 0

rest بعد المعاملات الثابتة

يمكن أن يأتي معامل rest بعد معاملات ثابتة، لكنه يجب أن يكون الأخير. إذ ترتبط المعاملات الثابتة أولًا، ويذهب كل ما يتبقى إلى مصفوفة rest.

function join(separator: string, ...parts: string[]): string {
  return parts.join(separator)
}
console.log(join("-", "a", "b", "c")) // a-b-c

معامل rest واحد، ودائمًا في النهاية

يمكنك استخدام معامل rest واحد فقط كحد أقصى، ولا يمكن أن يأتي بعده أي شيء. فوضع معامل بعد rest يُعدّ خطأً نحويًا.

// function bad(...nums: number[], last: number) {} // Error
function ok(first: number, ...rest: number[]) {
  return first + rest.length
}
console.log(ok(10, 1, 2)) // 12

قيود نوع العناصر

يفرض نوع عناصر مصفوفة rest قيدًا على كل وسيط. ويُكتشف تمرير نوع خاطئ في وقت الترجمة.

function tags(...labels: string[]): string {
  return labels.join(",")
}
console.log(tags("a", "b"))
// tags("a", 5) // Error: 5 is not a string

rest مع نوع اتحاد

يمكن أن يكون نوع العنصر اتحادًا، ما يسمح بوسائط مختلطة. وداخل الدالة، حدّد نوع كل عنصر قبل استخدامه.

function show(...items: (string | number)[]): string {
  return items.map(String).join(" ")
}
console.log(show("x", 1, "y", 2)) // x 1 y 2

rest مع أنواع tuple

يمكن تحديد نوع معامل rest على أنه tuple لوصف بنية تبدأ بعناصر ثابتة ثم تتبعها عناصر متغيرة العدد. وهنا يكون الوسيط الأول من نوع string، يليه أي عدد من قيم number.

function record(...args: [string, ...number[]]): string {
  const [label, ...values] = args
  return label + ": " + values.join(",")
}
console.log(record("scores", 9, 8, 7))

rest من نوع tuple يفرض عدد الوسائط

مع نوع rest الذي يكون tuple، تكون العناصر الأولى مطلوبة. ويؤدي حذف الوسيط الأول الإلزامي إلى خطأ في الترجمة، وهو قيد أقوى من المصفوفة العادية.

function record(...args: [string, ...number[]]): number {
  return args.length
}
console.log(record("x")) // 1
// record() // Error: missing string argument

نشر القيم في استدعاء rest

يمكنك تمرير مصفوفة موجودة إلى معامل rest باستخدام النشر في موضع الاستدعاء. ويجب أن يطابق نوع عناصر المصفوفة نوع المعامل.

function sum(...nums: number[]): number {
  return nums.reduce((a, b) => a + b, 0)
}
const values = [1, 2, 3]
console.log(sum(...values)) // 6

استخدام rest عمليًا

تدعم معاملات rest أدوات التسجيل والمنسّقات والأدوات الرياضية — وكل ما يتعامل مع عدد متغير من المدخلات باستخدام نوع مشترك أو منظم.

function max(first: number, ...rest: number[]): number {
  return rest.reduce((m, n) => (n > m ? n : m), first)
}
console.log(max(3, 7, 2, 9, 1)) // 9

تحقق سريع

اختبر مدى فهمك لمعاملات rest المحددة الأنواع.

مراجعة

تستخدم معاملات rest الرمز ... مع المعامل الأخير لجمع الوسائط الإضافية في مصفوفة محددة النوع. ويجب أن تأتي في النهاية، ولا يمكن أن يوجد أكثر من معامل واحد منها. حدّد نوعها كمصفوفة بسيطة أو مصفوفة اتحاد أو tuple للتعبير عن بنى تبدأ بعناصر ثابتة ثم تتبعها عناصر متغيرة العدد، مع فرض عدد الوسائط. وانشر مصفوفة موجودة في موضع الاستدعاء لتمريرها إلى معامل rest.

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

هل درس «المعاملات المتبقية في الدوال» مجاني؟

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

ماذا ستتعلم في «المعاملات المتبقية في الدوال»؟

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

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

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

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

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

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

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

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

  1. المعاملات المتبقية في الدوال
  2. النشر في المصفوفات والكائنات
  3. العناصر المتبقية في الصفائف
  4. تحديد أنواع الدوال متغيرة الوسائط
← العودة إلى TypeScript Academy