دروس الوحدة (1/2)
الوظائف المكتوبة
الوظائف هي اللبنات الأساسية لأي تطبيق JavaScript. في TypeScript، يمكننا إضافة تعليقات توضيحية بدقة إلى كل من وسيطات الإدخال وقيم الإرجاع، مما يجعل واجهاتنا واستدعاءات الوظائف آمنة للغاية وموثقة ذاتيًا.
المعلمات الاختيارية والافتراضية
في JavaScript، تكون كل معلمة اختيارية ويتم تعيينها افتراضيًا على undefined إذا تم حذفها. في TypeScript، تكون كل معلمة معلنة إلزامية افتراضيًا.
ومع ذلك، يمكننا تحديد المعلمات الاختيارية باستخدام علامة الاستفهام (?)، أو تحديد القيم الافتراضية مباشرة في توقيع الوظيفة.
1. المعلمات الاختيارية
يجب وضع المعلمات الاختيارية بعد جميع المعلمات الإلزامية:
function greetUser(name: string, title?: string): string {
if (title) {
return `Good morning ${title} ${name}`;
}
return `Hello ${name}`;
}2. المعلمات الافتراضية
إذا لم يتم توفير أي قيمة لمعلمة ذات قيمة افتراضية، فإن TypeScript يستنتج نوعها ويعين القيمة الافتراضية المحددة:
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
return `${prefix} ${name}`;
}معلمات الراحة (...args)
عندما نريد قبول عدد متغير من الوسائط، يمكننا استخدام عامل الراحة. في TypeScript، يجب كتابة هذه المعلمات كمصفوفة:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}أنواع الوظائف (توقيعات الاتصال)
يمكننا تحديد نوع الدالة بشكل مستقل ثم إعادة استخدامها في تعريفات المتغيرات أو وسيطات رد الاتصال:
// 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: المعلمات الاختيارية
قم بإنشاء دالة باسم formatName تقبل معلمة الاسم الأول (سلسلة) ومعلمة اسم العائلة الاختيارية (سلسلة). إذا تم توفير الاسم الأخير، فسيتم إرجاع "الاسم الأول اسم العائلة"، وإلا فسيتم إرجاع "الاسم الأول" فقط.
إظهار التلميح
تذكر أنه تم الإعلان عن المعلمة الاختيارية باستخدام سلسلة الاسم الأخير؟: بعد المعلمة الإلزامية.
الحل متاح بعد 3 من المحاولات
التمرين 2: المعلمات الافتراضية
قم بإنشاء دالة باسم الطاقة التي تقبل الأساس (الرقم) والأس (الرقم ذو القيمة الافتراضية 2). يجب أن تقوم الدالة بحساب وإرجاع قيمة الأساس المرفوعة إلى الأس (استخدم Math.pow).
إظهار التلميح
استخدم الأساس: الرقم والأس: الرقم = 2 ضمن توقيع الوظيفة.
الحل متاح بعد 3 من المحاولات
التمرين 3: التوقيع الوظيفي
حدد نوع الاسم المستعار المسمى BinaryOp الذي يصف دالة تقبل معلمتين رقميتين وترجع رقمًا. بعد ذلك، أعلن عن مجموع مسمى ثابت من النوع BinaryOp الذي ينفذ عملية الجمع.
إظهار التلميح
بناء جملة نوع الوظيفة هو (a: number، b: number) => number.
الحل متاح بعد 3 من المحاولات
التمرين 4: وظيفة رد الاتصال
قم بإنشاء دالة باسمprocessItems تقبل معلمتين: العناصر (مصفوفة من السلاسل) ورد الاتصال (دالة تقبل سلسلة واحدة ولا تُرجع شيئًا، أي فارغة). يجب أن تقوم الدالة بتشغيل حلقة for...of على كل عنصر في العناصر وتمريرها إلى رد الاتصال.
إظهار التلميح
قم بتعريف التوقيع كـprocessItems(items: string[], callback: (item: string) => void): void واستخدم حلقة لاستدعاء رد الاتصال.
الحل متاح بعد 3 من المحاولات