سؤال

يبدو أن الأسفل السفلية الواحدة في الهدف-ج-ج محجوزا للاستخدام "الداخلي" الخاص بالآبل (وكان متاحا للاستخدام بمتغيرات مثيل خاص قبل مطالبة Apple). ولكن لماذا يستخدمون مزدوج-Conderscore في مثال SQLITEBooks الخاص بهم للحصول على iPhone؟ انظر هذا القصاص مأخوذ من MasterViewController.m:

+ (EditingViewController *)editingViewController {
    // Instantiate the editing view controller if necessary.
    if (__editingViewController == nil) {
        __editingViewController = [[EditingViewController alloc] initWithNibName:@"EditingView" bundle:nil];
    }
    return __editingViewController;
}

هناك ذكر الاستخدام المزدوج تحت التشطيب على هذا منتدى نظرا لأنها تتعلق ج - فهي في "الاستخدام الداخلي للتعبير". أعتقد أنني لا أرى كيف ينطبق ذلك في هذا الموقف.

أحتاج إلى ViewController في تطبيقي من شأنه أن يتصرف كثيرا في مشروع مثال SQLITEBooks، لكن هذا تحت التأكيد المزدوج قد حيرني.

هل كانت مفيدة؟

المحلول

لا يتعامل برنامج التحويل البرمجي C ولا مترجم الهدف-C أسماء متغيرة مع تقارير السفلات بشكل مختلف عن أي اسم متغير آخر. السائل السفلية الواحدة أو المزدوجة هي ببساطة مؤتمر وتشكل بشكل فعال مساحة الاسم، مثل NS بادئة تستخدم في دروس الكاكاو مثل NSString.

النظر في رمز SQLITEBooks، MasterViewController.m يحدد هذا المتغير العالمي الثابت:

// Manage the editing view controller from this class so it can be easily accessed from both the detail and add controllers.
static EditingViewController *__editingViewController = nil;

لذلك تخميني هو أن مؤلف SQLITEBooks يستخدم إرشادات مزدوجة الرائدة للإشارة إلى متغير عالمي.

C الترجمة COPILION (وبهمة التمديد Accessive-C) أسماء الاحتياطية التي تبدأ بحرف اثنين من الأسفل ورسالة رأس مال لاستخدامها من قبل بائع المحول البرمجي، ومنحها مساحة اسم محجوزة لاستخدام المتغيرات العالمية والوظائف المستخدمة لتنفيذ المكتبات القياسية، أو تقديم جديدة غير - الكلمات الرئيسية القياسية مثل __block.

في حين أن رمز SQLITEBooks صالح تقنيا، إلا أنه يرتبط به بسهولة مع مساحة الاسم المحجوزة في رأيي. إذا قمت بإعادة استخدام هذا الرمز، فسوف أوصي بإعادة تسمية هذا المتغير (يحتوي Xcode على إعادة تسمية لطيفة للغاية يؤدي ذلك إلى القيام بذلك تلقائيا لك).

نصائح أخرى

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

يعد استخدام السفلات السفلية مشكلة لأن الكثير من المجموعات تحاول حجز كل اسم مع مزيج محدد من الشرطة السفلية.

استخدمت شركة Apple تقليدية بادئة واحدة تحت تشكيلها للدلالة على متغير مثيل خاص (أسلوب مشترك في اللغات الموجهة للكائنات). تم اتخاذ هذا إلى أن الجميع يجب أن يبدع الجميع مع إيثارهم مع الشرطة السفلية حتى أظهرت شركة Apple أن استخدام الشرطة السفلية في التعليمات البرمجية قد يخلق تعارضات مع الكاكاو إذا قررت Apple تغيير رؤوسهم وربما لا يجب عليك ذلك. لذلك أصبحت بادئات التشطيب "لا ينصح" بممارسة ترميز.

في لغات مشتقة C و C، فإن أي كلمة مع الشرطة السفلية المزدوجة مسبقة والمتابعة هي ملحق لغة غير قياسي. انظر ملحقات أبل مثل __attribute__

غالبا ما تتم إضافة السفلات السفلية في كثير من الأحيان كمبرمج أو نسخة مصححا لإصدارات الأسماء الأصلية (خاصة عندما يكون التحويل البرمجي متعدد الأبعاد) ويجدر عادة بحيث تظل هذه الأسماء متميزة بوضوح عن النسخ الأصلية. Google لاحقة بمتغيرات مثيلها المحلي المكوني - C مع الشرطة السفلية لتجنب الصراعات مع الشرطة السفلية لشركة Apple.

نصيحتي: لا تستخدم الشرطة السفلية. يجب أن لا تستخدم المتغيرات المحلية بنفس الاسم مثل متغيرات المثيل (هذا مجرد مربكة). الصراع المحتمل الوحيد بين المعلمات في أساليب SETTER ومتغيرات المثيل المقابلة - وربما يجب أن تكون بادئة المعلمة مع أحرف صغيرة "a"، "جديد" (أو ما شابه) لأن هذا يشير بوضوح إلى أن المعلمة هي القيم الواردة ولكن ليس بعد قيمة "".

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

ليس من غير المألوف بالنسبة لبائعي المترجم / المكتبة بالدلالة على بعض Postfixes قبل "محفوظة" بالنسبة لهم. هذا إلى حد كبير لتجنب أي تضارب غير مقصود بين الأنواع / يحدد / المتغيرات الموروثة.

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

أما لماذا يستخدم رمز المثال هذا النمط - استخدم المؤلف الأصلي نفس أسلوب الترميز الذي يحتمل توظيفه في عمله اليومي ولم يتم تمييز النزاع المحتمل أبدا.

يجب أن تكون على ما يرام الاحتفاظ بمجموعة الكود AS-IS، ولكن إذا كان الأمر يجعلك غير مرتاح، فيمكنك إعادة تسمية المتغير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top