مقدمة
مزايا عادات كتابة جافا سكريبت الجيدة هي بديهية. اليوم ، توصي Bin Go مواصفات برمجة Dojo JavaScript لك ، والتي تعد مواصفات نمط برمجة JavaScript جيدة جدًا. يوصى بأن تتعلم من هذه المواصفات لكتابة جافا سكريبت. بفضل iFeelinglucky للترجمة.
تسلسل
يُسمح بأي عنف لهذا الدليل إذا كان يعزز قابلية القراءة.
يجب أن تكون جميع الرموز سهلة للقراءة.
مرجع قراءة سريعة
Core API يرجى استخدام النمط التالي:
| بناء | قاعدة | تعليقات |
| الوحدة النمطية | القضية السفلية | لا تستخدم دلالات متعددة (لا توجد كلمات متعددة أبدًا) |
| عطوف | جمل | |
| الأساليب العامة | مزج | يمكن للمكالمات الخارجية الأخرى أيضًا استخدام Somfort_case () ، في هذا النمط |
| المتغيرات العامة | مزج | |
| ثابت | جمل أو رأس المال |
على الرغم من أن ما يلي ليس ضروريًا ، إلا أنه يوصى باستخدامه:
| بناء | قاعدة |
| طريقة خاصة | مختلط ، مثال: _mixedcase |
| المتغيرات الخاصة | مختلط ، مثال: _mixedcase |
| معلمات الطريقة | مختلط ، مثال: _mixedcase ، حقيبة مختلطة |
| المتغير المحلي | مختلط ، مثال: _mixedcase ، حقيبة مختلطة |
مواصفات تسمية
1. يجب أن يكون الاسم المتغير أحرفًا صغيرة.
2. تسمية الفئات تستخدم قواعد تسمية الجمل ، مثل:
حساب ، EventHandler
3. يجب إعلان الثوابت في مقدمة كائن (فئة) أو متغير التعداد. يجب أن يكون لتسمية متغير التعداد أهمية عملية ، ويجب على أعضائه استخدام قواعد تسمية الجمل أو الاستفادة من:
نسخة الكود كما يلي:
var nodetypes = {
العنصر: 1 ،
الوثيقة: 2
}
4. لا يمكن للكلمات المختصرة استخدام الأسماء الرأسمالية كأسماء متغيرة:
getinnerhtml () ، getxml () ، xmldocument
5. يجب أن يكون أمر الطريقة فعلًا أو عبارة فعل:
obj.getsomevalue ()
6. يجب تسمية تسمية الفئات العامة باستخدام أسماء مختلطة (حقيبة مختلطة).
7. يجب أن يستخدم اسم متغير CSS متغيره العام المقابل.
8. يجب تسمية أعضاء السمة المتغيرة في الفئة الخاصة باسم مختلط (حقيبة مختلطة) وتطوي عليها (_). على سبيل المثال:
نسخة الكود كما يلي:
var myClass = function () {
var _buffer ؛
this.dosomething = function () {
} ؛
}
9. إذا تم ضبط المتغير على الخاص ، فيجب التأكيد عليه قبل ذلك.
this._somePrivateVariable = بيان ؛
10. يجب أن تستخدم المتغيرات الشائعة اسمًا يتوافق مع اسمها:
موضوع مستقر (موضوع) // متغير هو متغير من النوع
11. يجب أن تستخدم جميع الأسماء المتغيرة الأسماء الإنجليزية.
12. إذا كان المتغير لديه نطاق واسع (نطاق كبير) ، فيجب استخدام المتغيرات العالمية ؛ في هذا الوقت ، يمكن تصميمه كأعضاء في الفصل. إذا كان النطاق النسبي أصغر أو متغيرات خاصة ، فاستخدم كلمات موجزة لتسمية ذلك.
13. إذا كان المتغير له قيمة إرجاع ضمنية ، تجنب استخدام طرقه المماثلة:
Gethandler () ؛ // تجنب استخدام getEventHandler ()
14. يجب أن تعبر المتغيرات العامة بوضوح عن سماتها الخاصة لتجنب الغموض في المعنى ، مثل:
mouseeventhandler
، لا mseevthdlr.
يرجى الانتباه إلى هذا الحكم مرة أخرى ، فإن فوائد القيام بذلك واضحة للغاية. يمكن أن يعبر بوضوح عن المعنى المحدد بواسطة التعبير. على سبيل المثال:
dojo.events.mouse.handler // بدلاً من dojo.events.mouse.mouseeventhandler
15. يمكن تسمية الفئة/البنائين باستخدام الاسم الذي يمتد فئة الأساس الخاصة به ، بحيث يمكن العثور على اسم فئة القاعدة بشكل صحيح وبسرعة:
EventHandler
uieventhandler
mouseeventhandler
يمكن للطبقة الأساسية أن تقلل من تسميةها مع وصف خصائصها بوضوح:
MouseeventHandler بدلاً من mouseuieventhandler.
مواصفات التسمية الخاصة
لا ينبغي ربط مصطلح "GET/SET" بحقل ما لم يتم تعريفه على أنه متغير خاص.
الاسم المتغير الذي يسبقه "IS" يجب أن يكون قيمة منطقية ، ويمكن أن يكون "لديه" ، "Can" أو "يجب".
يجب أن يكون مصطلح "حساب" كاسم متغير متغيرًا تم حسابه.
يجب أن يكون مصطلح "Find" كاسم متغير متغيرًا تم العثور عليه.
يجب أن يكون المصطلح "تهيئة" أو "init" كاسم متغير فئة أو نوع آخر من المتغيرات التي تم إنشاء مثيل لها (تهيئتها).
يجب أن تتبع متغيرات التحكم في واجهة المستخدم (واجهة المستخدم) اسم نوع التحكم ، على سبيل المثال: LeftCombobox ، TopScrollPane.
يجب أن يكون للرقم الجمع اتفاقية الاسم الشائعة (النص الأصلي: يجب استخدام النموذج الجمع لتسمية مجموعات).
الأسماء المتغيرة التي تبدأ بـ "num" أو "العد" هي رقمية تقليدية (كائن).
يوصى باستخدام متغيرات التكرار لاستخدام المتغيرات بأسماء مثل "I" و "J" و "K" (وما إلى ذلك).
يجب أن تستخدم المصطلحات التكميلية الكلمات التكميلية ، مثل: GET/SET ، إضافة/إزالة ، إنشاء/تدمير ، بدء/توقف ، إدراج/حذف ، ابدأ/نهاية ، إلخ.
حاول استخدام الاختصار إن أمكن.
تجنب غموض الأسماء المتغيرة المنطقية ، على سبيل المثال:
isnoterror ، isnotfound غير قانوني
توصي فئة الخطأ بإضافة "استثناء" أو "خطأ" إلى الاسم المتغير.
إذا كانت الطريقة تُرجع فئة ، فيجب أن تشير إلى ما يعيده باسمه ؛ إذا كانت عملية ، فيجب أن تشير إلى ما فعلته.
وثيقة
يرجى استخدام 4 علامات تبويب فارغة إلى المسافة البادئة.
إذا كان المحرر الخاص بك يدعم علامات الملف ، فيرجى إضافة السطر التالي لتسهيل قراءة الكود لدينا:
// vim: ts = 4: noet: tw = 0:
ملاحظة المترجم: يستخدم الأجانب محرري VIM في كثير من الأحيان ، حتى تتمكن من اختيار متابعة هذه المقالة.
يجب أن تبدو طي الكود المنطقية وتكون منطقية:
نسخة الكود كما يلي:
var shoexpression = expression1
+ Expression2
+ Expression3 ؛
var o = someObject.get (
التعبير 1 ،
Expression2 ،
التعبير 3
) ؛
ملاحظة: يجب أن يكون المسافة البادئة للتعبير متسقة مع الإعلان المتغير.
ملاحظة: يجب أن تكون معلمات الوظيفة مسافة بادئة بشكل صريح ، وتتوافق قواعد المسافة البادئة مع الكتل الأخرى.
عامل
تَخطِيط
قطعة
يجب أن يبدو مقتطف الكود العادي هكذا:
نسخة الكود كما يلي:
بينما (! isdone) {
dosomething () ؛
isDone = moretodo () ؛
}
يجب أن يبدو البيان if هكذا:
نسخة الكود كما يلي:
إذا (somecondition) {
البيانات ؛
} آخر إذا (someothercondition) {
البيانات ؛
} آخر {
البيانات ؛
}
يجب أن تبدو البيان مثل هذا:
نسخة الكود كما يلي:
لـ (التهيئة ؛ الشرط ؛ تحديث) {
البيانات ؛
}
يجب أن يبدو البيان أثناء هذا:
نسخة الكود كما يلي:
بينما (! isdone) {
dosomething () ؛
isDone = moretodo () ؛
}
Do ... يجب أن يبدو البيان أثناء هذا الأمر:
نسخة الكود كما يلي:
يفعل {
البيانات ؛
} بينما (حالة) ؛
يجب أن يبدو عبارة التبديل هكذا:
نسخة الكود كما يلي:
التبديل (حالة) {
القضية ABC:
البيانات ؛
// السقوط
قضية ديف:
البيانات ؛
استراحة؛
تقصير:
البيانات ؛
استراحة؛
}
المحاولة ... يجب أن يبدو بيان الصيد هكذا:
نسخة الكود كما يلي:
يحاول {
البيانات ؛
} catch (ex) {
البيانات ؛
} أخيراً {
البيانات ؛
}
خط واحد إن آخر ، بينما يجب أيضًا إدراج أو للبيانات بين قوسين ، ولكن يمكن كتابتها مثل هذا:
إذا (الشرط) {بيان ؛ }
بينما (الشرط) {بيان ؛ }
لـ (intialization ؛ الشرط ؛ التحديث) {بيان ؛ }
فارغ
تعليقات
وثيقة
يوفر ما يلي بعض الوظائف الأساسية أو الكائنات الوصف الأساليب:
ملخص: وصف موجز لغرض هذه الوظيفة أو تنفيذ الكائن
الوصف: وصف موجز لهذه الوظيفة أو الفصل
العائد: يصف ما تعود هذه الوظيفة (لا بما في ذلك نوع الإرجاع)
معلومات الوظيفة الأساسية
نسخة الكود كما يلي:
وظيفة(){
// ملخص: قريبا سيكون لدينا ما يكفي من الكنز لحكم كل من نيو جيرسي.
// الوصف: أو يمكننا فقط الحصول على غرفة جديدة.
// انظر ، تذهب تجده. لا يصرخ عليك.
// كل ما أحاول فعله هو جعله يبتسم ويغني حوله
// ويرقص من حوله وهو يضع في داخلي.
// قال لي أن أحصل على الفريزر لأن هناك كرنفال هناك.
// إرجاع: انظر ، شريط Bananarama!
}
معلومات وظيفة الكائن
لا يوجد وصف قيمة الإرجاع
نسخة الكود كما يلي:
{
// ملخص: Dingle ، إشراك آلة قوس قزح!
// وصف:
// أخبرك ماذا ، أتمنى لو كنت-يا g-هذا الشعاع ،
// الخروج هكذا ، السرعة ، قد ترغب في ضبط ذلك.
// لقد فعلت حقًا رقمًا على ظهري ، هناك. أعني ، وأنا لا أفعل
// هل تريد أن تقول Whiplash ، بعد ، لأن هذا بعيد جدًا ،
// لكنك مصاب ، أليس كذلك؟
}
إعلان الوظائف
في بعض الحالات ، تكون الدعوة وإعلان الوظائف غير مرئية. في هذه الحالة ، ليس لدينا طريقة لتضمين التعليمات ، وما إلى ذلك (لمكالمات البرنامج) في الوظيفة. إذا واجهت هذا الموقف ، فيمكنك استخدام فئة لتغليف الوظيفة.
ملاحظة: لا يمكن استخدام هذه الطريقة إلا بدون معلمات تهيئة للوظيفة. إذا لم يكن الأمر كذلك ، فسيتم تجاهلهم.
نسخة الكود كما يلي:
dojo.declare (
"فو" ،
باطل،
{
// ملخص: Phew ، هذا بالتأكيد مريح ، Flyck.
// وصف:
// منذ آلاف السنين ، قبل فجر
// رجل كما عرفناه ، كان هناك سيدي سانتا من كلوز:
// إبداع يشبه القرد يصنع ألعابًا خامًا ولا طائل منه
// من Dino-Bones ، يلقونهم في الإبداع الشبيه بشمبانزي
// الأيدي المتجاعدة بغض النظر عن كيفية تصرفها
// العام السابق.
// إرجاع: ما لم يدفع كارل رسومًا إلى شيوخ Elfin في الفضاء.
}
) ؛
<h3> المعلمات </h3>
<ol>
<li> نوع بسيط
يمكن التعليق مباشرة على أنواع المعلمات وشرحها في تعريف معلمة الوظيفة.
[cc lang = "javaScript"] الدالة (/*string*/ foo ،/*int*/ bar) ...
معلمات النوع المتغير
فيما يلي بعض المعدلات للرجوع إليها:
؟ المعلمات الاختيارية
... نطاق المعلمة من الوجه غير مؤكد
صفيف
وظيفة (/*سلسلة؟*/ foo ، /*int...*/ bar ،/*string []*/ baz) ...
وصف المعلمة العالمية
إذا كنت ترغب في إضافة وصف ، فيمكنك نقلها إلى كتلة التهيئة.
تنسيق المعلومات الأساسية هو: * مفتاح * الحقل الوصف ( * مفتاح * الوصف الجملة)
تنسيق المعلمات والمتغيرات هو:*المفتاح*~*type*~ الوصف حقل (*مفتاح*~*نوع*~ الوصف الجملة)
ملاحظة:*الكلمات الرئيسية*و ~*type*~ يمكن التعبير عنها في أي حروف وأرقام.
نسخة الكود كما يلي:
وظيفة (فو ، بار) {
// فو: سلسلة
// تستخدم لكونك المعلمة الأولى
// بار: int
// تستخدم لكونك المعلمة الثانية
}
عامل
نظرًا لأن تصريحات متغيرات المثيل ، فإن متغيرات النموذج الأولي والمتغيرات الخارجية متسقة ، فهناك العديد من الطرق لإعلان المتغيرات وتعديلها. يجب أن يشير التعريف المحدد وتحديد المواقع إلى الاسم والنوع والنطاق والمعلومات الأخرى للمتغير في الموقع الأول حيث يظهر المتغير.
نسخة الكود كما يلي:
وظيفة foo () {
// mystring: سلسلة
// مرات: int
// كم مرة لطباعة mystring
// فاصل: سلسلة
// ما يجب طباعته بين mystring*
this.mystring = "نص العنصر الوطني" ؛
this.times = 5 ؛
}
foo.prototype.setstring = function (myString) {
this.mystring = mystring ؛
}
foo.prototype.toString = function () {
لـ (int i = 0 ؛ i <this.times ؛ i ++) {
dojo.debug (this.mystring) ؛
dojo.debug (foo.separator) ؛
}
}
foo.separator = "======" ؛
تعليقات متغيرة في الكائنات
يجب استخدام طريقة التعليقات التوضيحية التي تتوافق مع قيم الكائنات وطرقها ، مثل عندما يعلنون:
نسخة الكود كما يلي:
{
// المفتاح: سلسلة
// قيمة بسيطة
المفتاح: "القيمة" ،
// key2: String
// قيمة بسيطة أخرى
}
قيمة الإرجاع
نظرًا لأن الوظائف يمكن أن تُرجع قيم متعددة (أنواع) مختلفة في نفس الوقت ، يجب إضافة كل قيمة إرجاع إلى تعليق نوع الإرجاع. تم التعليق للتو في السطر. إذا كانت جميع قيم الإرجاع من نفس النوع ، يتم تحديد النوع الذي تم إرجاعه ؛ إذا كان هناك العديد من قيم الإرجاع المختلفة ، يتم تمييز نوع الإرجاع على أنه "مختلط".
نسخة الكود كما يلي:
وظيفة() {
إذا (الحجج. الطول) {
إرجاع "لقد مررت بالوسيطة (ق)" ؛ // خيط
} آخر {
العودة كاذبة // منطقية
}
}
رمز كاذب (تتم مناقشته)
في بعض الأحيان تحتاج إلى إضافة وصف للعملية الوظيفية لهذه الوظيفة والفئة في وظيفة أو فئة. إذا كنت تخطط للقيام بذلك ، فيمكنك استخدام /*======== (يجب أن تظهر الشخصيات 5 مرات أو أكثر). ميزة ذلك هي أنه لا يتعين عليك إضافة هذه الأشياء إلى الرمز (ملاحظة المترجم: قد يعني المؤلف الأصلي نظام إدارة التعليمات البرمجية).
بهذه الطريقة ، سيكون هناك تعليق طويل جدًا في /*====== و ====* /. يمكنك التفكير في حذفه بعد تعديل الوظيفة.
نسخة الكود كما يلي:
/*=======
module.pseudo.kwargs = {
// url: سلسلة
// موقع الملف
عنوان URL: "" ،
// mimetype: سلسلة
// text/html ، text/xml ، etc
mimetype: ""
}
=====*/
دالة (/*module.pseudo.kwargs*/ kwargs) {
dojo.debug (kwargs.url) ؛
dojo.debug (kwargs.mimetype) ؛
}
الرابط الأصلي: http://dojotoolkit.org/developer/styleguide
ترجم بواسطة: