عمليات الإغلاق هي أحد الأشياء التي يميل معظم المبتدئين إلى النضال معها خاصة إذا لم تكن قد واجهتها من قبل. ومع ذلك، فقد اكتشفنا أنه مع قليل من التفكيك، تكون عمليات الإغلاق واضحة نسبيًا ومفيدة جدًا عند تطبيقها بكفاءة.
سنحاول في هذا البرنامج التعليمي فهم عمليات الإغلاق بمزيد من التفاصيل والكشف عن غموضها باستخدام لغة البرمجة Go.
ما هي عمليات الإغلاق؟
مثل أي شيء آخر، نبدأ بالأساسيات ونستكشف ماهية عمليات الإغلاق.
في Go، يشير الإغلاق إلى وظيفة تلتقط وتتذكر النطاق المعجمي المحيط.
النطاق المعجمي هو في الأساس المتغيرات الموجودة في النطاق في وقت تعريف الوظيفة. بمجرد التقاط المتغيرات، يمكننا الرجوع إليها حتى بعد الانتهاء من تنفيذ الوظيفة الخارجية.
بكلمات بسيطة، يُغلق الإغلاق على النطاق المحيط به، ويحافظ على حالته.
الدور الرئيسي لعمليات الإغلاق هو عندما تحتاج إلى تغليف بيانات أو سلوك معين. على سبيل المثال، إنشاء وإرجاع الوظائف التي تحتوي على إمكانية الوصول إلى البيانات الداخلية.
قم بإنشاء إغلاق في Go
يعد إنشاء إغلاق في Go أمرًا بسيطًا ومباشرًا للغاية. يمكننا إنشائها كدالة عادية مع الاختلاف الرئيسي وهو أن الإغلاق يشير إلى المتغيرات التي لم يتم تمريرها كمتغيرات.
مثال على النحو التالي:
طَرد رئيسييستورد 'إف إم تي'
func رئيسي () {
addFunc := func ( س كثافة العمليات ) func ( كثافة العمليات ) كثافة العمليات {
يعود func ( و كثافة العمليات ) كثافة العمليات {
يعود س + و
}
}
add10 := addFunc ( 10 )
fmt . برينتلن ( add10 ( 6 ))
}
في المثال الموضح، لدينا دالة تسمى 'addFunc' والتي تقوم بإرجاع دالة أخرى. يتم إغلاق الدالة المرتجعة فوق المتغير 'x' الذي يشكل إغلاقًا.
add10 هو إغلاق يلتقط قيمة 'x'. لذلك، عندما نستدعي Add10(6)، فإنه يضيف 6 إلى القيمة التي تم التقاطها مسبقًا وهي 10.
تعديل المتغير المغلق
يمكننا أيضًا تعديل المتغير المغلق في الوظيفة الداخلية كما هو موضح في مثال الكود التالي:
طَرد رئيسييستورد 'إف إم تي'
func رئيسي () {
addFunc := func ( س كثافة العمليات ) func ( كثافة العمليات ) كثافة العمليات {
يعود func ( و كثافة العمليات ) كثافة العمليات {
س += و
يعود س
}
}
add10 := addFunc ( 10 )
fmt . برينتلن ( add10 ( 6 ))
fmt . برينتلن ( add10 ( 4 ))
}
في هذه الحالة، لا يزال 'addFunc' يُرجع إغلاقًا يلتقط قيمة 'x'.
ومع ذلك، فإن الإغلاق يعدل المتغير الذي تم التقاطه عن طريق إضافة قيمة 'y' إليه.
تستمر حالة 'x' عبر الاستدعاءات للإغلاق.
خاتمة
في هذا المنشور، استكشفنا أساسيات عمليات الإغلاق في لغة البرمجة Go للحفاظ على حالة المتغيرات بعد نطاق الوظيفة.