محتويات الدورة

JavaScript / أساسي: القيم وأسس المتصفح / الدرس 3

الدوال والمعاملات والنطاق المعجمي

صمّم دوال صغيرة بمدخلات ومخرجات ظاهرة. تتبع النطاق والإرجاع بقواعد تسعير وأهلية قابلة لإعادة الاستخدام دون حالة عامة مخفية.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تعريف عقود دوال ومسارات إرجاع واضحة.
  • تتبع النطاق المعجمي وارتباطات الكتل.
  • تمييز التصريح والتعبير واستخدام الاستدعاء الراجع.

تملك الدالة تحويلاً صغيراً

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

javascript معاملات ونتائج صريحة
function totalCents(unitCents, quantity) {
  return unitCents * quantity;
}
console.log(totalCents(250, 3));
console.log(totalCents(250, 0));
الناتج المتوقع
750
0

لا يقرأ الحساب حالة الواجهة. للصفر معنى حسابي ولو اشترط حد التسجيل كمية موجبة.

تتبع كل مسار إرجاع

تعيد الدالة undefined إذا بلغت نهايتها بلا قيمة. ينهي return الاستدعاء فلا ينفذ ما بعده في المسار نفسه. يعيد جسم السهم التعبيري تعبيره، بينما تبدأ الأقواس كتلة تحتاج عادة return صريحاً. أحط الكائن الحرفي بأقواس عند إرجاعه من سهم موجز لئلا يفهم كتلة. راعِ الفرق في المجموعات؛ فتحتاج map قيمة راجعة لكل عنصر، بينما تستخدم forEach للآثار ولا تبني مصفوفة التحويل.

يتبع النطاق موضع كتابة الشيفرة

يحل النطاق المعجمي الاسم عبر النطاقات المحيطة بتعريف الدالة، لا نطاق المستدعي العارض. تمنع المعاملات والارتباطات المحلية تداخل أعمال المستدعين. ترتبط let وconst بالكتلة، وتنتج قراءتهما قبل التهيئة في نطاقهما ReferenceError لا قيمة أولية مفيدة. لا تعتمد على نقل التصريحات ذهنياً إلى الأعلى. صرّح قرب توفر القيمة واختر أسماء مختلفة إذا أخفت إعادة التسمية القيمة التي تستخدمها القاعدة.

تمرير السلوك دون تشغيله مبكراً

الاستدعاء الراجع دالة تمرر لعملية أخرى. يمرر calculate قيمة الدالة، ويمرر calculate() نتيجتها فوراً. تحدد الواجهة المستقبلة الموعد والمعاملات والتكرار؛ فليس كل استدعاء راجع غير متزامن. تنفذ map دالتها أثناء الاستدعاء الحالي، وينتظر مستمع حدث المتصفح إرسالاً لاحقاً. يلتقط السهم this معجمياً، بخلاف استدعاء الطريقة العادي الذي يعتمد على المستقبل. لا تغير شكل الدالة دون مراعاة دور المستقبل.

javascript استدعاء راجع متزامن ببحث معجمي
const rate = 5;
function addFee(amount) { return amount + rate; }
function caller() {
  const rate = 100;
  return [10, 20].map(addFee);
}
console.log(JSON.stringify(caller()));
الناتج المتوقع
[15,25]

تستخدم addFee الخمسة الخارجية لا المئة المحلية للمستدعي. تمرر map المبالغ متزامنة وتجمع القيم الراجعة.

وضع الآثار عند حد مقصود

يسهل اختبار الحساب الخالص لأن المدخل نفسه ينتج النتيجة نفسها دون تعديل الخارج. تحتاج التطبيقات آثاراً مثل العرض وطلب البيانات؛ ضعها في تنسيق صغير بدلاً من إنكارها. يفيد تقسيم التحليل والتحقق والحساب والعرض؛ ولكل مرحلة معنى إخفاق مختلف. لا تخفِ فشل التحقق بصفر يمثل أيضاً عنصراً مجانياً صالحاً. ميّز تمثيل النتائج كي يختار المستدعي الرسالة الصحيحة ولا ينفذ أثراً بعد رفض الحساب.

الأخطاء الشائعة وإصلاحها

إنتاج map عناصر undefined

لماذا يحدث؟
نسيان return في سهم ذي كتلة.
كيف تصلحه؟
إرجاع التعبير أو استخدام جسم موجز.
كيف تتجنب تكراره؟
التحقق من القيم لا طول المصفوفة وحده.

تشغيل المعالج أثناء التسجيل

لماذا يحدث؟
تمرير handler() بدلاً من الدالة.
كيف تصلحه؟
تمرير الدالة أو غلاف يؤجل توفير المعاملات.
كيف تتجنب تكراره؟
فحص توقيت الاستدعاء في الواجهة المستقبلة.

إخفاء مدخل خاطئ بصفر صالح

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

اختبر فهمك

1. أصلح items.map(x => { x * 2; }).

اعرض الحل المشروح

استخدم items.map(x => x * 2) أو return داخل الأقواس. للمدخل [2, 4] توقع [4, 8]. يجري الأصل الضرب لكنه يعيد undefined، فلا يكشف العيب التحقق من تنفيذ الدالة فقط.

2. يقرأ الحاسب خصماً عاماً. كيف يتحسن عقده؟

اعرض الحل المشروح

مرر الخصم المتحقق منه معاملاً صريحاً وأعد المبلغ. يختار المستدعي الخصم الحالي ويملك أثر العرض. اختبر الصفر وغير الصفر دون تغيير حالة عامة بين الحالات.

أهم ما تعلمته

  • تحل الأسماء معجمياً ولا تعني الاستدعاءات الراجعة عملاً غير متزامن.
  • يفصل عقد إرجاع واضح النتيجة الصالحة من الرفض.

المراجع الرسمية