المعاملات المتبقية في الدوال
حدّدوا أنواع الدوال التي تقبل أي عدد من الوسائط
المعاملات المتبقية في الدوال درس مجاني في 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()) // 0rest بعد المعاملات الثابتة
يمكن أن يأتي معامل 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 stringrest مع نوع اتحاد
يمكن أن يكون نوع العنصر اتحادًا، ما يسمح بوسائط مختلطة. وداخل الدالة، حدّد نوع كل عنصر قبل استخدامه.
function show(...items: (string | number)[]): string {
return items.map(String).join(" ")
}
console.log(show("x", 1, "y", 2)) // x 1 y 2rest مع أنواع 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المعاملات المتبقية في الدوال
- النشر في المصفوفات والكائنات
- العناصر المتبقية في الصفائف
- تحديد أنواع الدوال متغيرة الوسائط