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

كيف تعمل الكلمة الرئيسية المؤجلة لـ Go في أمر تنفيذ الوظيفة؟

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

How Does Go\'s Defer Keyword Work in Function Execution Order?

فهم وظيفة الكلمة الرئيسية المؤجلة لـ Go

عند العمل مع Go، يعد فهم سلوك الكلمة الأساسية المؤجلة أمرًا بالغ الأهمية. تسمح هذه الكلمة الأساسية للمطورين بتأجيل تنفيذ الوظيفة حتى تعود الوظيفة المحيطة. ومع ذلك، من المهم ملاحظة أنه يتم تقييم قيمة الوظيفة ومعلماتها عند تنفيذ عبارة التأجيل.

مثال: تقييم أمر التأجيل

لتوضيح ذلك، ضع في اعتبارك ما يلي الكود:

package main

import "fmt"

func main() {
    defer having()(fun("with Go."))
    fmt.Print("some ") // evaluation order: 3
}

func having() func(string) {
    fmt.Print("Go ") // evaluation order: 1
    return funWithGo
}

func fun(msg string) string {
    fmt.Print("have ") // evaluation order: 2
    return msg
}

func funWithGo(msg string) {
    fmt.Println("fun", msg) // evaluation order: 4
}
في هذا المثال، يتم تنفيذ التعليمات البرمجية بالترتيب التالي:

    يتم تقييم وجود وظيفة وإرجاع وظيفة تأخذ سلسلة كمدخل (ترتيب التقييم: 1)
  1. يتم تقييم الوظيفة الممتعة باستخدام "with Go". سلسلة كمدخل (ترتيب التقييم: 2)
  2. fmt.Print("some ") يتم تنفيذها (ترتيب التقييم: 3)
  3. تأجيل استدعاء الدالة funWithGo مع النتيجة من fun (ترتيب التقييم: 4)

تطبيق مبدأ التأجيل

لحل المشكلة المذكورة في الاستعلام الأصلي، يمكننا استخدام الكلمة الأساسية التأجيل لطباعة سعر التذكرة بشكل صحيح بناءً على على السن المدخلة. يوجد أدناه نسخة معدلة من الكود:

package main

import "fmt"

func main() {
    age := 999
    defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age
    defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price
}

func getTicketPrice(age int) float64 {
    // Calculate ticket price based on age
    // logic can be customized here
    fmt.Println("...order is 2...")
    switch {
    case age  13 && age في هذا الرمز المعدل، نستفيد بشكل صحيح من الكلمة الرئيسية المؤجلة لضمان طباعة العمر وسعر التذكرة بعد تنفيذ الوظائف المعنية، مما يؤدي إلى حل المشكلة الأولية.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3