(arg) => R أنواع الدوال السهمية

آخر تحديث: 2026-10-22

(arg) => R أنواع الدوال السهمية

الدوال السهمية تحمل صيغة تعليق مدمجة: نقطتان بعد المعاملات، والتعبير هو قيمة الإرجاع. وعند التصريح بنوع الدالة للمتغير صراحةً، يترابط كل شيء في الجسم تلقائيًا — المعاملات وقيمة الإرجاع — وهي الأسلوب الموصى به للاستدعاءات الراجعة لمرة واحدة مثل مقارنات الترتيب.

المجموعةالدوال والأصناف
النوعبناء الجملة
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

const byPriceAsc: (a: Product, b: Product) => number = (a, b) => a.price - b.price;

// دالة سهمية عامة (في ملفات .tsx اكتب <T,> لتفادي اللبس مع وسوم JSX)
const identity = <T,>(v: T): T => v;

⚙️ المعاملات

(a: Product, b: Product) => numberتعليق نوع الدالة للمتغير: تحصل a/b في جسم التنفيذ على أنواعها تلقائيًا
<T,>(v: T): Tدالة سهمية عامة: تُكتب معاملات الأنواع قبل قائمة المعاملات؛ والفاصلة الزائدة للتغريد في .tsx

القيمة المُعادة:في الجسم التعبيري تكون قيمة الإرجاع هي نوع التعبير نفسه؛ وفي الجسم الكتلي تُستخدم return، ويمكن تعليق نوع الإرجاع صراحةً.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

Mouse:89 | Keyboard:199 | Monitor:899

(مخرجات التشغيل بعد التحويل؛ مقارنة تعيد قيمة منطقية (a.price < b.price) خطأ نوعي — فـ sort يتوقع number)

💡 نقاط مهمة

ℹ️ معلومة الدوال السهمية لا تملك this خاصًا بها: في استدعاءات طرق الكائنات ومعالجات الأحداث تُستخدم this الخارجية مباشرةً، وهذا أهم فرق تشغيلي بينها وبين الدوال العادية.
⚠️ تنبيه إرجاع كائن حرفي في جسم تعبيري يتطلب أقواسًا: () => ({ key: v })؛ وكتابة () => { key: v } تُفسَّر كجسم كتلي وتعيد undefined.
💡 تلميح لمقارنة تصاعدية أعِد a.price - b.price (سالب/صفر/موجب)؛ ولا تستخدم القيم المنطقية أبدًا — فطرح القيم المنطقية يعمل بالمصادفة لكنه ملتبس دلاليًا وخاطئ نوعيًا أيضًا.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س هل تختلف طريقة كتابة النوع بين الدالة السهمية والعادية؟
ج على مستوى النوع متطابقة تمامًا: (params) => returnType في الحالتين. الاختلاف في الدلالات التشغيلية (this وarguments وقابلية الاستخدام مع new).
س لماذا يفشل <T>(v: T) في ملفات .tsx؟
ج لأن الأقواس الزاوية العامة تتعارض مع صيغة وسوم JSX. اكتب <T,> (بفاصلة زائدة) أو <T extends unknown> للتغريد.
س متى يلزم تعليق نوع لمتغير دالة سهمية؟
ج عندما يُسند إلى متغير أو يُخزَّن في كائن أو يُصدَّر كواجهة برمجية — فالتعليق يغذي الجسم بالاستدلال السياقي. أما المواضع المضمّنة ذات أنواع معاملات معروفة (مثل sort(byPriceAsc)) فلا حاجة فيه.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%