ما هو اصطلاح التسمية الجيد لمتغيرات الوظائف واسعة النطاق؟

StackOverflow https://stackoverflow.com/questions/151594

  •  02-07-2019
  •  | 
  •  

سؤال

يمكن أن يكون لديك اصطلاح تسمية مختلف لأعضاء الفصل والكائنات الثابتة والكائنات العامة والبنيات.بعض الأمثلة منهم على النحو التالي.

_member
m_member

أو في حالة جافا، استخدام this.member.

ولكن هل هناك أي تقنية جيدة أو اصطلاح تسمية لنطاق متغيرات الوظيفة الذي ينقل عندما يكون لمتغير واحد نطاق وظيفة كامل أو نطاق عمر قصير؟

void MyFunction()
{
  int functionScopeVariable;

  if(true)
  {
    //no need for function variable scope naming convention
  }
}
هل كانت مفيدة؟

المحلول

نميل إلى استخدام بادئة L_ في وظائفنا لـ "Local". وهذا يعمل بشكل جيد.

نصائح أخرى

أنا في الواقع أشجع على تفويض هذه المهمة إلى IDE/المحرر الذي تستخدمه.

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

يمكن لكل IDE تقريبًا أن يحدد أنماطًا مختلفة (الألوان، الخطوط، أنواع الخطوط، ...) لأنواع متغيرة مختلفة (عضو مثيل، عضو ثابت، وسيطة، متغير محلي، ...) لذا دع IDE يخبرك بما نوع المتغير يحررك في الواقع من الاضطرار إلى كتابة تلك اللاحقة (عديمة الفائدة) في كل مرة.

لذلك اقتراحي:استخدام أسماء ذات معنى دون أي بادئة أو لاحقة.

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

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

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

التوجيه من MSFT وأدلة الأنماط الأخرى لحقول المثيلات الخاصة هو _memberName (تدوين حالة الجمل مسبوقًا بـ "_").وهذا أيضًا هو الاصطلاح المستخدم في الكود المصدري للعديد من البرامج التعليمية الحديثة لـ Microsoft.

أستخدمها لأنها أقصر وليست مجرية، ويدعمها R# كقاعدة افتراضية لحقول المثيلات الخاصة.

يعجبني أيضًا لأنه يحجب الحقول الخاصة عن Intellisense، كما ينبغي، نظرًا لأنك تفضل الوصول إلى الأعضاء العموميين أولاً.إذا أردت الوصول إلى اسم العقار وأبدأ بكتابة "Na"الاقتراح الأول هو اسم خاصية المثيل العام التي تحتوي على حالة Pascal.في الحالات النادرة التي أرغب فيها بالدخول إلى المجال الخاص مباشرة هذا يجبرني على اتخاذ قرار واعي بالبدء بالكتابة "_"، ثم أحصل على القائمة الكاملة لحقولي الخاصة في نافذة Intellisense المنبثقة.

لقد رأيت أيضًا إرشادات تنص على أنه يجب أن يكون _MemberName إذا كان حقل الدعم لخاصية عامة تسمى MemberName (تدوين حالة Pascal مسبوقًا بـ "_") أنا شخصياً لا أحب ذلك لأنني أعتقد أن الحرف M الكبير زائد عن الحاجة، ويضيف ضغطات غير ضرورية على المفاتيح ولا يضيف أي معلومات إضافية.

يعود الأمر كله حقًا إلى ما تقترحه إرشادات الأسلوب للغة إذا كان هناك أي منها.

أعتقد أن أي شيء على ما يرام طالما أنه ينقل المعنى المتعلق باستخدامه.

أفضل أن أبقي الأمر بسيطًا، فأنا أستخدم:

 m_varname - Class member variables
 g_varname - Global variables

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

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