| عنصر الدالة | آلية التحديد في TypeScript | الغرض البرمجي |
|---|---|---|
| معاملات المدخلات (Parameters) | تحديد نوع البيانات بجانب اسم كل معامل (مثل name: string) | منع تمرير بيانات غير متوافقة أو خاطئة للدالة |
| نوع العائد (Return Type) | تحديد النوع بعد قوس المعاملات (مثل (): number) | ضمان أن القيمة المُرجعة من الدالة تطابق النوع المطلوب تماماً |
| المعاملات الاختيارية (Optional) | وضع علامة الاستفهام ? قبل نقطتي الراس (مثل age?: number) | السماح باستدعاء الدالة مع أو بدون تمرير هذا المعامل |
في لغة TypeScript وتطبيقات Angular 22.1، تُعتبر الدوال هي حجر الأساس لتنفيذ المنطق البرمجي. لضمان أمان الكود ومنع الأخطاء الشائعة، تتيح لنا تايبسكربت إمكانية تحديد أنواع المدخلات (Parameters) والمخرجات (Return Types) بدقة تامة. هذا يضمن أن الدالة تستقبل فقط البيانات المتوقعة وترجع النتيجة بالنوع الصحيح دون مفاجآت أثناء تشغيل التطبيق.
عند كتابة أي دالة، يمكنك إجبار المعاملات على الالتزام بنوع بيانات محدد (string, number, أو كائنات مخصصة). إذا حاول أي جزء في تطبيق Angular تمرير نوع بيانات مختلف، سيعترض محرر الكود فوراً.
يتم كتابة نوع البيانات المُعادة بعد الأقواس الخاصة بالمعاملات مباشرة. على سبيل المثال، إذا كانت الدالة ستحسب مجموع رقمين، فإننا نحدد نوع العائد ليصبح number لضمان عدم إرجاع نص أو قيمة فارغة بالخطأ.
في هذا المثال، نقوم بإنشاء دالة لحساب السعر النهائي بعد إضافة الضريبة، مع تحديد أنواع المدخلات ونوع القيمة المُعادة:
| 1 | // دالة تستقبل رقمين كمدخلات وترجع رقماً حصرياً |
| 2 | function calculateTax(price: number, taxRate: number): number { |
| 3 | return price + (price * taxRate); |
| 4 | } |
| 5 | |
| 6 | let total: number = calculateTax(500, 0.15); // صحيح تماماً |
| 7 | // let errorCall = calculateTax("500", "0.15"); // خطأ برمجي يمنعه المحرر |
في مكونات Angular، قد تحتاج أحياناً لدالة تقبل بيانات اختيارية مثل رسالة ترحيب مخصصة:
| 1 | // معامل اللقب (title) اختياري باستخدام علامة الاستفهام (?) |
| 2 | function formatUsername(firstName: string, title?: string): string { |
| 3 | if (title) { |
| 4 | return `${title} ${firstName}`; |
| 5 | } |
| 6 | return firstName; |
| 7 | } |
| 8 | |
| 9 | let user1 = formatUsername("سارة", "مهندسة"); // النتيجة: مهندسة سارة |
| 10 | let user2 = formatUsername("محمد"); // النتيجة: محمد (بدون خطأ) |