"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تقدم النطاق

تقدم النطاق

تم النشر بتاريخ 2024-11-02
تصفح:924

Scope progression

في البرمجة الحتمية، عادة ما يكون لدينا كود يبدو على النحو التالي:

func addOneToSlice(xs []int) []int {
  rs := make([]int, len(xs))
  for i, value := range xs {
    rs[i] = value   1
  }
  return rs
}

ومع ذلك، لاحظ ما يلي حول حلقة for:

  • كل تكرار له غرض محدد، وهو إضافة واحد إلى العنصر الحالي.
  • ومع ذلك، ليس لكل تكرار أي قيود على العنصر الذي يمكنه تشغيله.
  • التشغيل مع xs[i 2] وrs[i 3] لن يغير بشكل أساسي بنية الكود الذي لدينا، بينما يجعل النتيجة النهائية غير صحيحة.

قارن كيف سيتم تنفيذ نفس المهمة في F#:

let rec addOneToList =
  function
  | [] -> []
  | x :: xs -> x   1 :: addOneToList xs

الآن خذ بعين الاعتبار ما يلي:

  • لدينا قائمة كوسيطة دالة.
  • القائمة باللغات الوظيفية هي قائمة مرتبطة.
  • العمليات الفعالة والمعيارية في القوائم المرتبطة هي:
    • فصل الرأس x عن ذيله xs
    • فعل شيء ما في الرأس x
    • مقارنة القائمة التي تم تمريرها كمعلمة مع القائمة الفارغة []

نظرًا لهذه القيود، فإن إضافة 1 إلى أي عنصر y ليس على رأس القائمة من شأنه أن يغير بنية وظيفتنا بشكل كبير.

الآن قارن بين كيفية تقدم الحساب في كلا الأسلوبين:

  • في النمط الوظيفي، نقوم بإنشاء نطاق جديد بقيم جديدة، والذي يتضمن إجراء استدعاء متكرر في المثال أعلاه.
  • في الأسلوب الأمري، نقوم بتغيير قيمة موجودة دون تغيير النطاق.

في الأسلوب الوظيفي، يؤدي الجمع بين كلا النطاقين والتقدم الحسابي إلى النتائج التالية:

  • نتجنب الطفرة.
  • تدفق التنفيذ واضح.
  • أصبح الهيكل الذي نتعامل معه واضحًا.
بيان الافراج تم نشر هذه المقالة على: https://dev.to/lamg/scope-progression-4iil?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3