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

لماذا لا تستطيع الدالات Go إرجاع قيم متعددة مباشرة؟

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

Why Can't Go Functions Return Multiple Values Directly?

مشكلة إرجاع قيم متعددة

عند محاولة إرجاع قيم متعددة في Go، قد يبدو الأمر محيرًا حول سبب صلاحية بعض الجمل بينما البعض الآخر ليس كذلك. لتوضيح ذلك، خذ بعين الاعتبار مقتطفي التعليمات البرمجية التاليين:

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}

مقتطف الرمز الأول صالح ويعرض كلاً من قيم المعلومات والقيم المنطقية. ومع ذلك، فإن المقتطف الثاني غير صالح:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}

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

شرح نمط "Comma Ok"

يكمن مفتاح فهم هذا السلوك في "الفاصلة" حسنًا "النمط. في Go، عند الوصول إلى الخريطة، تكون النتيجة زوجًا من القيم: القيمة المرتبطة بالمفتاح وقيمة منطقية تشير إلى ما إذا كان المفتاح موجودًا في الخريطة. غالبًا ما يُستخدم هذا للتمييز بين المفتاح المفقود والقيمة الصفرية.

في مقتطف التعليمات البرمجية الأول، يُرجع تعبير all[id] زوجًا من القيم، التي تم تعيينها له وتكون موجودة. ثم تقوم عبارة الإرجاع بإرجاع هذه القيم.

اعتبارات المترجم

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

في حالة مقتطف الكود الثاني، فإن التعبير المرجع all[id] يُرجع قيمة واحدة فقط، وهي غير متوافقة. مع المتغيرين على الجانب الأيسر. وبالتالي، يقوم المترجم بالإبلاغ عن خطأ.

تجنب المتغيرات المؤقتة

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

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

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

Copyright© 2022 湘ICP备2022001581号-3