الناس استخدام الهنغارية تسمية الاتفاقيات في العالم الحقيقي ؟ [مغلقة]

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

سؤال

هل يستحق التعلم الاتفاقية أو مصيبة في القراءة و الصيانة?

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

المحلول

معتبرا أن معظم الناس استخدام منهج المجرية بعد يساء فهمها نسخة منه ، أود أن أقول أنها جميلة طائل.

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

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

الأصلي, جيد, التعريف هو تطبيقات منهج المجرية, لكن معظم الناس يستخدمون نظم منهج المجرية.

وكمثال على اثنين ، النظر في التقديم المتغيرات مع لتر طول ، عن المنطقة و v حجم.

مع هذه الرموز التالية التعبير المنطقي:

int vBox = aBottom * lVerticalSide;

ولكن هذا لا:

int aBottom = lSide1;

إذا كنت خلط البادئات, أنهم أن تعتبر جزءا من المعادلة الحجم = المساحة * طول على ما يرام بالنسبة مربع ، ولكن نسخ طول قيمة في منطقة متغيرة أن رفع بعض الأعلام الحمراء.

للأسف البعض التدوين هو أقل فائدة ، حيث الناس البادئة متغير الأسماء مع نوع من القيمة ، مثل هذا:

int iLength;
int iVolume;
int iArea;

بعض الناس استخدام n على رقم أو أنا صحيح, و تعويم, s سلسلة الخ.

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

ولكن يجب عليك ان تجعل عقلك الخاصة.كل ما يمكنني قوله هو أنني لا استخدم.


تحرير فقط لإضافة القصير ، بينما كنت لا تستخدم منهج المجرية, أنا لا تستخدم بادئة ، و التأكيد.أنا البادئة جميع حقول خاصة من الطبقات مع _ وإلا توضيح أسمائهم كما أود أن الممتلكات ، titlecase مع أول حرف من الأحرف الكبيرة.

نصائح أخرى

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

قراءة جويل سبولسكي المادة مما يجعل رمز الخطأ نظرة خاطئة المناسبة منظور مبرر.

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

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

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

أنا لا تزال تستخدم منهج المجرية عندما يتعلق الأمر عناصر واجهة المستخدم, حيث عدة عناصر واجهة المستخدم هي ذات الصلة إلى كائن معين/القيمة ، على سبيل المثال ،

lblFirstName التسمية كائن txtFirstName على مربع النص.أنا بالتأكيد لا اسم لهم على حد سواء "الاسم الأول" حتى إذا أن هو القلق/مسؤولية كل الكائنات.

كيف الآخرين نهج تسمية عناصر واجهة المستخدم?

ليس من المجدي (وتشتيت) ولكن نسبيا في استخدام الثقيلة في الشركة ، على الأقل بالنسبة أنواع مثل رجات, سلاسل, المنطقية, و الزوجي.

أشياء مثل sValue, iCount, dAmount أو fAmount, ، bFlag هي في كل مكان.

ذات مرة كان هناك سبب وجيه لهذه الاتفاقية.الآن هو السرطان.

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

في قوله هذا على الرغم من أنني أفضل أن تفعل بعيدا مع ذلك, و بدلا من هذا:

int vBox = aBottom * lVerticalSide;

أكتب هذا:

int boxVolume = bottomArea * verticalHeight;

إنه 2008.ليس لدينا 80 حرف عرض ثابت الشاشات بعد الآن!

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

آسف متابعة مع السؤال ، ولكن هل التقديم واجهات مع "أنا" التأهل كما المجرية التدوين؟ -إذا كان هذا هو الحال, ثم نعم, الكثير من الناس يستخدمون ذلك في العالم الحقيقي.إذا لم يكن كذلك ، تجاهل هذا.

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

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

أليس نطاق أكثر أهمية من نوع هذه الأيام مثلا ،

  • انا المحلية
  • عن حجة
  • m الأعضاء
  • ز العالمية
  • الخ

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

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

ولكن لا ننسى أن لديك بعض الأدوات القوية تحت تصرفكم إلى جانب التسمية.

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

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

لتلخيص:نعم, أعتقد من الصعب حول كيفية استخدام الأسماء في الرمز للتعبير عن الأفكار بوضوح ، ولكن أيضا أن ننظر إلى أخرى قوية OO أدوات يمكنك الاتصال على.

أنا لا استخدام ضيقا جدا من منهج المجرية, ولكن أجد نفسي باستخدام تجنيب بعض مشتركة كائنات مخصصة للمساعدة في التعرف عليها, و أيضا أنا أميل إلى بادئة التحكم واجهة المستخدم الرسومية الكائنات مع نوع عنصر التحكم الذي هم.على سبيل المثال ، labelFirstName, textFirstName ، buttonSubmit.

يمكنني استخدام الهنغارية تسمية على عناصر واجهة المستخدم مثل أزرار, مربعات النص و إبليس.الفائدة الرئيسية هي تجميع في Visual Studio التحسس المنبثقة.إذا كنت ترغب في الوصول إلى إبليس ، أنا ببساطة البدء في الكتابة lbl....و Visual Studio سوف تشير إلى كل ما عندي من إبليس, nicley تجميعها معا.

ومع ذلك ، بعد أكثر من Silverlight و WPF الأشياء الاستفادة من ربط البيانات لا حتى اسم كل الضوابط بعد الآن, منذ ليس لدي مرجع لهم من التعليمات البرمجية-خلف (منذ ليس هناك حقا أي codebehind بعد الآن ;)

ما هو الخطأ هو خلط المعايير.

ما هو صحيح هو التأكد من أن الجميع يفعل نفس الشيء.

int Box = iBottom * nVerticleSide

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

أنا كسر هذه العادة قليلا ولكن التقديم مع نوع يمكن أن تكون مفيدة في جافا سكريبت أن لا يكون قوي متغير الكتابة.

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

منهج المجرية لا طائل في نوع آمن اللغات.على سبيل المثالمشترك البادئة سترى في Microsoft رمز "lpsz" التي تعني "طويلة المؤشر إلى صفر إنهاء السلسلة".منذ أوائل 1700 لم تستخدم مجزأة أبنية حيث قصيرة وطويلة مؤشرات وجود العادي تمثيل السلسلة في C++ هو دائما صفر-إنهاء و المترجم هو نوع آمن لذا لن يسمح لنا تطبيق غير سلسلة عمليات السلسلة.لذلك لا شيء من هذه المعلومات من أي استخدام حقيقي مبرمج - إنها أكثر من مجرد الكتابة.

ومع ذلك, يمكنني استخدام فكرة مشابهة:البادئات التي توضح الاستخدام متغير.الرئيسية منها هي:

  • m = الأعضاء
  • ج = const
  • ق = ثابت
  • v = المتقلبة
  • p = مؤشر (pp=مؤشر إلى مؤشر, الخ)
  • انا = مؤشر أو مكرر

هذه يمكن أن تكون جنبا إلى جنب ، وذلك ثابت متغير العضو الذي هو مؤشر من شأنه أن يكون "mspName".

أين هي هذه مفيدة ؟

  • حيث الاستخدام المهم, هو فكرة جيدة أن نذكر مبرمج متغير (على سبيل المثال) المتقلبة أو مؤشر
  • مؤشر dereferencing تستخدم للقيام رأسي حتى لقد استخدمت p البادئة.الآن فإنه من السهل حقا أن تعرف عندما يكون لديك كائن (البرتقالي) مؤشر إلى كائن (pOrange) أو مؤشر إلى مؤشر إلى كائن (ppOrange).إلى إلغاء مرجعية كائن ، فقط ضع علامة النجمة أمامه كل ف في اسمها.حالة حلها, لا أكثر deref البق!
  • في المنشئات وعادة ما نجد أن المعلمة اسم مطابق عضو متغير اسم (مثلا ، الحجم).أنا أفضل أن استخدام "mSize = الحجم ؛" من "size = theSize" أو "هذا.size = الحجم".بل هو أيضا أكثر أمانا:لا بطريق الخطأ استخدام "size = 1" (إعداد المعلمة) عندما قصدت أن أقول "mSize = 1" (الإعداد الأعضاء)
  • في الحلقات ، مكرر المتغيرات كلها أسماء ذات مغزى.معظم المبرمجين استخدام "أنا" أو "فهرس" ومن ثم يجب أن المكياج الجديدة أسماء لا معنى لها ("ي", "index2") عندما ترغب في الحلقة الداخلية.يمكنني استخدام اسم ذو معنى مع أنا البادئة (iHospital, iWard, iPatient) إذا كنت لا تعرف دائما ما هو مكرر بالتكرار.
  • في الحلقات ، يمكنك مزج العديد من المتغيرات ذات الصلة باستخدام نفس اسم قاعدة مع مختلف البادئات:البرتقال = pOrange[iOrange];هذا يعني أيضا أنك لا تجعل مجموعة الفهرسة الأخطاء (pApple[أنا] يبدو موافق ، ولكن اكتب كما pApple[iOrange] و الخطأ هو واضح على الفور).
  • العديد من المبرمجين استخدام النظام دون أن يعرفوا ذلك:قبل إضافة طويلة لاحقة مثل "مؤشر" أو "Ptr" - ليس هناك أي سبب وجيه لاستخدام أطول شكل من حرف واحد IMHO ، لذلك يمكنني استخدام "أنا" و "p".أقل الكتابة ، أكثر اتساقا أسهل في القراءة.

هذا هو نظام بسيط مما يضيف معلومات مفيدة ومفيدة إلى رمز ، و يلغي إمكانية العديد بسيطة ولكنها شائعة أخطاء البرمجة.

لقد تم العمل على IBM منذ 6 أشهر و لم أره في أي مكان (الحمد لله لأنني أكره ذلك.) أرى إما camelCase أو c_style.

thisMethodIsPrettyCool()
this_method_is_pretty_cool()

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

هناك أيضا اثنين من أنواع مختلفة من منهج المجرية.انظر جويل المادة.أنا لا يمكن العثور عليه (له الأسماء بالضبط لا تجعل من السهل العثور عليها), أي شخص لديه رابط واحد أعني ؟

تحرير:إسفين المادة أعني في منصبه.

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

شكل شعبية (خطأ منهج المجرية) حيث البادئة يعني نوع (سلسلة الباحث) غير مجدية في معظم لغات البرمجة الحديثة.

خصوصا مع أسماء لا معنى لها مثل سترا.لا أستطيع أن أفهم أننا شعب استخدام أسماء لا معنى لها مع البادئات التي تعطي شيئا.

أنا استخدم نوع على أساس (نظم حماد) المكونات (على سبيل المثال editFirstName, lblStatus إلخ) كما أنه يجعل الإكمال التلقائي تعمل على نحو أفضل.

أنا في بعض الأحيان استخدام التطبيق حماد عن المتغيرات حيث نوع المعلومات هو isufficient.أي fpX يدل ثابت إلى متغير (نوع int, ولكن لا يمكن أن تكون مختلطة والمتطابقة مع الباحث), rawInput المستخدم السلاسل التي لم يتم التحقق من صحتها الخ

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

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