arg?: T المعاملات الاختيارية والمعاملات ذات القيم الافتراضية

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

arg?: T المعاملات الاختيارية والمعاملات ذات القيم الافتراضية

تُعلّم العلامة ? المعاملَ الاختياري (يجوز عدم تمريره)، وتمنح العلامة = المعاملَ قيمةً افتراضية (تُستخدم تلقائيًا عند الإغفال). كلاهما يتيح للمستدعي تمرير المعلومات الضرورية فقط، وهما الأداة الأولى لبناء تواقيع دوال ودّية.

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

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

📝 الصيغة

function buildLabel(orderId: number, prefix = "ORD", note?: string): string {
  const base = `${prefix}-${String(orderId).padStart(5, "0")}`;
  return note ? `${base} (${note})` : base;
}

⚙️ المعاملات

prefix = "ORD"معامل افتراضي: يُستخدم عند الإغفال، ويُستنتج نوعه من القيمة الافتراضية
note?: stringمعامل اختياري: يكون undefined عند عدم تمريره، لذا نوعه الفعلي هو string | undefined ويلزم تضييقه قبل الاستخدام

القيمة المُعادة:يُعلَّق نوع الإرجاع كالمعتاد أو يُستنتج؛ وانتبه: إذا شارك معامل اختياري في الحساب فيجب أن يغطي النوع فرع undefined.

▶ مثال

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

الناتج:

ORD-00042
VIP-00042
ORD-00042 (عاجل)

(مخرجات التشغيل بعد التحويل؛ عند عدم تمرير note يكون undefined، ولن تظهر كلمة "undefined" في التسمية أبدًا)

💡 نقاط مهمة

ℹ️ معلومة يجب أن تأتي المعاملات الاختيارية بعد الإلزامية؛ ويمكن وضع المعاملات الافتراضية في أي موضع، لكن إذا وُضعت في الوسط فلتخطيها يجب تمرير undefined صراحةً.
⚠️ تنبيه النوع الحقيقي لـ note?: string هو string | undefined، واستدعاء طرق السلاسل النصية عليه مباشرةً يعطي خطأً؛ ضيّقه أولًا بـ if (note) أو استخدم معاملًا افتراضيًا بدلًا منه.
💡 تلميح عند تجاوز عدد المعاملات 3، انتقل إلى تمرير كائن إعدادات (options: { prefix?: string; note?: string }) — فهو أقرب إلى القراءة وأسهل توسعةً من قائمة مواضع طويلة.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س هل يمكن دمج المعامل الافتراضي والاختياري معًا؟
ج نعم وهو أمر شائع: prefix = "ORD" له قيمة افتراضية ويمكن إغفاله معًا. أما المعامل الاختياري الصِرف فيكون undefined عند الإغفال، فيجب على جسم الدالة التعامل مع ذلك بنفسه.
س هل يمكن وضع معامل إلزامي بعد اختياري؟
ج لا، المترجم يطلب الإلزامية أولًا. والاستثناء هو المعامل الافتراضي في الوسط: لتخطيه مرِّر undefined صراحةً، مثل buildLabel(42, undefined, "加急").
س كيف تختار بين المعاملات الافتراضية والتحميل الزائد للدوال؟
ج إذا كان المطلوب فقط «تمرير معاملات أقل» فاستخدم القيم الافتراضية/المعاملات الاختيارية؛ أما إذا اختلفت أنواع المعاملات نفسها (string أو Date تتبع منطقًا مختلفًا) فتحتاج إلى التحميل الزائد.
Web-Tutorial.com

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

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

100%