الانتقال إلى المحتوى الرئيسي
الوحدة 3 · الدرس 1 من 25/14 في الدورة~12 min
دروس الوحدة (1/2)

الوظائف المكتوبة

الوظائف هي اللبنات الأساسية لأي تطبيق JavaScript. في TypeScript، يمكننا إضافة تعليقات توضيحية بدقة إلى كل من وسيطات الإدخال وقيم الإرجاع، مما يجعل واجهاتنا واستدعاءات الوظائف آمنة للغاية وموثقة ذاتيًا.


المعلمات الاختيارية والافتراضية

في JavaScript، تكون كل معلمة اختيارية ويتم تعيينها افتراضيًا على undefined إذا تم حذفها. في TypeScript، تكون كل معلمة معلنة إلزامية افتراضيًا.

ومع ذلك، يمكننا تحديد المعلمات الاختيارية باستخدام علامة الاستفهام (?)، أو تحديد القيم الافتراضية مباشرة في توقيع الوظيفة.

1. المعلمات الاختيارية

يجب وضع المعلمات الاختيارية بعد جميع المعلمات الإلزامية:

TS
function greetUser(name: string, title?: string): string {
  if (title) {
    return `Good morning ${title} ${name}`;
  }
  return `Hello ${name}`;
}

2. المعلمات الافتراضية

إذا لم يتم توفير أي قيمة لمعلمة ذات قيمة افتراضية، فإن TypeScript يستنتج نوعها ويعين القيمة الافتراضية المحددة:

TS
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
  return `${prefix} ${name}`;
}

معلمات الراحة (...args)

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

TS
function sumAll(message: string, ...numbers: number[]): string {
  const total = numbers.reduce((sum, n) => sum + n, 0);
  return `${message} ${total}`;
}

أنواع الوظائف (توقيعات الاتصال)

يمكننا تحديد نوع الدالة بشكل مستقل ثم إعادة استخدامها في تعريفات المتغيرات أو وسيطات رد الاتصال:

TS
// Define function type using type alias
type MathOperation = (a: number, b: number) => number;

const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;

يعد هذا الأسلوب ضروريًا عند تمرير الوظائف كوسيطات إلى وظائف أخرى (رد الاتصال).


جربه بنفسك

التمرين 1: المعلمات الاختيارية

تمرين#ts.m3.l1.e1
المحاولات: 0جارٍ التحميل…

قم بإنشاء دالة باسم formatName تقبل معلمة الاسم الأول (سلسلة) ومعلمة اسم العائلة الاختيارية (سلسلة). إذا تم توفير الاسم الأخير، فسيتم إرجاع "الاسم الأول اسم العائلة"، وإلا فسيتم إرجاع "الاسم الأول" فقط.

جارٍ تحميل المحرر…
إظهار التلميح

تذكر أنه تم الإعلان عن المعلمة الاختيارية باستخدام سلسلة الاسم الأخير؟: بعد المعلمة الإلزامية.

الحل متاح بعد 3 من المحاولات

التمرين 2: المعلمات الافتراضية

تمرين#ts.m3.l1.e2
المحاولات: 0جارٍ التحميل…

قم بإنشاء دالة باسم الطاقة التي تقبل الأساس (الرقم) والأس (الرقم ذو القيمة الافتراضية 2). يجب أن تقوم الدالة بحساب وإرجاع قيمة الأساس المرفوعة إلى الأس (استخدم Math.pow).

جارٍ تحميل المحرر…
إظهار التلميح

استخدم الأساس: الرقم والأس: الرقم = 2 ضمن توقيع الوظيفة.

الحل متاح بعد 3 من المحاولات

التمرين 3: التوقيع الوظيفي

تمرين#ts.m3.l1.e3
المحاولات: 0جارٍ التحميل…

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

جارٍ تحميل المحرر…
إظهار التلميح

بناء جملة نوع الوظيفة هو (a: number، b: number) => number.

الحل متاح بعد 3 من المحاولات

التمرين 4: وظيفة رد الاتصال

تمرين#ts.m3.l1.e4
المحاولات: 0جارٍ التحميل…

قم بإنشاء دالة باسمprocessItems تقبل معلمتين: العناصر (مصفوفة من السلاسل) ورد الاتصال (دالة تقبل سلسلة واحدة ولا تُرجع شيئًا، أي فارغة). يجب أن تقوم الدالة بتشغيل حلقة for...of على كل عنصر في العناصر وتمريرها إلى رد الاتصال.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتعريف التوقيع كـprocessItems(items: string[], callback: (item: string) => void): void واستخدم حلقة لاستدعاء رد الاتصال.

الحل متاح بعد 3 من المحاولات