คำนำ
ข้อดีของพฤติกรรมการเขียน JavaScript ที่ดีนั้นชัดเจนในตัวเอง วันนี้ Bin Go แนะนำข้อกำหนดการเขียนโปรแกรม Dojo JavaScript ให้คุณซึ่งเป็นข้อกำหนดสไตล์การเขียนโปรแกรม JavaScript ที่ค่อนข้างดี ขอแนะนำให้คุณเรียนรู้จากข้อกำหนดนี้เพื่อเขียน JavaScript ขอบคุณ i.feelinglucky สำหรับการแปล
ลำดับ
ความรุนแรงใด ๆ ต่อคู่มือนี้ได้รับอนุญาตหากช่วยเพิ่มความสามารถในการอ่าน
รหัสทั้งหมดจะต้องทำให้ผู้อื่นอ่านได้ง่าย
ข้อมูลอ้างอิงอย่างรวดเร็วอ่าน
Core API โปรดใช้สไตล์ต่อไปนี้:
| โครงสร้าง | กฎ | ความเห็น |
| โมดูล | ตัวพิมพ์เล็ก | อย่าใช้ความหมายหลายอย่าง (ไม่เคยมีหลายคำ) |
| ใจดี | อูฐ | |
| วิธีการสาธารณะ | ผสม | การโทรภายนอกอื่น ๆ ยังสามารถใช้ lower_case () ในรูปแบบนี้ |
| ตัวแปรสาธารณะ | ผสม | |
| คงที่ | อูฐหรือเมืองหลวง |
แม้ว่าจะไม่จำเป็นต่อไปนี้ขอแนะนำให้ใช้:
| โครงสร้าง | กฎ |
| วิธีการส่วนตัว | ผสมตัวอย่าง: _mixedcase |
| ตัวแปรส่วนตัว | ผสมตัวอย่าง: _mixedcase |
| พารามิเตอร์วิธีการ | ผสม, ตัวอย่าง: _mixedcase, mixedcase |
| ตัวแปรท้องถิ่น | ผสม, ตัวอย่าง: _mixedcase, mixedcase |
ข้อกำหนดการตั้งชื่อ
1. ชื่อตัวแปรจะต้องเป็นตัวอักษรตัวพิมพ์เล็ก
2. การตั้งชื่อของคลาสใช้กฎการตั้งชื่ออูฐเช่น:
บัญชี eventhandler
3. ค่าคงที่จะต้องประกาศไว้ที่ด้านหน้าของวัตถุ (คลาส) หรือตัวแปรการแจงนับ การตั้งชื่อตัวแปรการแจงนับจะต้องมีความสำคัญในทางปฏิบัติและสมาชิกจะต้องใช้กฎการตั้งชื่ออูฐหรือใช้ประโยชน์:
การคัดลอกรหัสมีดังนี้:
var nodetypes = {
องค์ประกอบ: 1,
เอกสาร: 2
-
4. คำย่อไม่สามารถใช้ชื่อทุนเป็นชื่อตัวแปร:
getinnerhtml (), getxml (), xmldocument
5. คำสั่งของวิธีการจะต้องเป็นคำกริยาหรือวลีคำกริยา:
obj.getSomeValue ()
6. การตั้งชื่อของคลาสสาธารณะจะต้องตั้งชื่อโดยใช้ชื่อผสม (MixtCase)
7. ชื่อของตัวแปร CSS ต้องใช้ตัวแปรคลาสสาธารณะเดียวกันที่สอดคล้องกัน
8. สมาชิกแอตทริบิวต์ตัวแปรของคลาสส่วนตัวจะต้องตั้งชื่อด้วยชื่อผสม (MixtCase) และขีดเส้นใต้ (_) ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
var myclass = function () {
var _buffer;
this.dosomething = function () {
-
-
9. หากตัวแปรถูกตั้งค่าเป็นส่วนตัวจะต้องเน้นย้ำก่อนหน้านั้น
this._SomePrivateVariable = คำสั่ง;
10. ตัวแปรทั่วไปต้องใช้ชื่อประเภทที่สอดคล้องกับชื่อของพวกเขา:
settopic (หัวข้อ) // หัวข้อตัวแปรเป็นตัวแปรของประเภทหัวข้อ
11. ชื่อตัวแปรทั้งหมดจะต้องใช้ชื่อภาษาอังกฤษ
12. หากตัวแปรมีขอบเขตกว้าง (ขอบเขตขนาดใหญ่) ต้องใช้ตัวแปรทั่วโลก ในเวลานี้มันสามารถออกแบบเป็นสมาชิกของชั้นเรียน หากขอบเขตสัมพัทธ์มีขนาดเล็กลงหรือตัวแปรส่วนตัวให้ใช้คำที่กระชับเพื่อตั้งชื่อ
13. หากตัวแปรมีค่าการส่งคืนโดยนัยหลีกเลี่ยงการใช้วิธีการที่คล้ายกัน:
Gethandler (); // หลีกเลี่ยงการใช้ GetEventHandler ()
14. ตัวแปรสาธารณะจะต้องแสดงคุณลักษณะของตนเองอย่างชัดเจนเพื่อหลีกเลี่ยงความกำกวมในความหมายเช่น:
MouseEventHandler
ไม่ใช่ msevthdlr
โปรดให้ความสนใจกับบทบัญญัตินี้อีกครั้งประโยชน์ของการทำเช่นนั้นชัดเจนมาก มันสามารถแสดงความหมายที่กำหนดโดยนิพจน์อย่างชัดเจน ตัวอย่างเช่น:
dojo.events.mouse.handler // แทน dojo.events.mouse.mouseventhandler
15. คลาส/ตัวสร้างสามารถตั้งชื่อได้โดยใช้ชื่อที่ขยายคลาสฐานเพื่อให้ชื่อคลาสฐานสามารถพบได้อย่างถูกต้องและรวดเร็ว:
EventHandler
uieventhandler
MouseEventHandler
คลาสฐานสามารถลดการตั้งชื่อได้ในขณะที่อธิบายคุณสมบัติของมันอย่างชัดเจน:
MouseEventHandler เมื่อเทียบกับ MouseUieventHandler
ข้อกำหนดการตั้งชื่อพิเศษ
คำว่า "Get/Set" ไม่ควรเชื่อมโยงกับฟิลด์เว้นแต่ว่าจะถูกกำหนดให้เป็นตัวแปรส่วนตัว
ชื่อตัวแปรที่นำหน้าด้วย "IS" ควรเป็นค่าบูลีนและสามารถเป็น "มี", "สามารถ" หรือ "ควร"
คำว่า "คำนวณ" เป็นชื่อตัวแปรควรเป็นตัวแปรที่คำนวณ
คำว่า "ค้นหา" เป็นชื่อตัวแปรควรเป็นตัวแปรที่พบว่าเสร็จสมบูรณ์
คำว่า "เริ่มต้น" หรือ "init" เป็นชื่อตัวแปรควรเป็นคลาสหรือตัวแปรประเภทอื่น ๆ ที่ได้รับการสร้างอินสแตนซ์ (เริ่มต้น)
ตัวแปรควบคุม UI (อินเทอร์เฟซผู้ใช้) ควรตามด้วยชื่อของประเภทการควบคุมตัวอย่างเช่น: leftcombobox, topscrollpane
หมายเลขพหูพจน์จะต้องมีการประชุมชื่อสามัญ (ข้อความต้นฉบับ: แบบฟอร์มพหูพจน์ต้องใช้ในการรวบรวมชื่อ)
ชื่อตัวแปรเริ่มต้นด้วย "NUM" หรือ "นับ" เป็นตัวเลขตามปกติ (วัตถุ)
แนะนำให้ใช้ตัวแปรซ้ำเพื่อใช้ตัวแปรที่มีชื่อเช่น "I", "J", "K" (และอื่น ๆ )
ข้อกำหนดเพิ่มเติมจะต้องใช้คำเสริมเช่น: get/set, เพิ่ม/ลบ, สร้าง/ทำลาย, เริ่ม/หยุด, แทรก/ลบ, เริ่มต้น/สิ้นสุด ฯลฯ ฯลฯ
พยายามใช้ตัวย่อถ้าเป็นไปได้
หลีกเลี่ยงความคลุมเครือของชื่อตัวแปรบูลีนตัวอย่างเช่น:
IsnotError, Isnotfound เป็นสิ่งผิดกฎหมาย
คลาสข้อผิดพลาดแนะนำให้เพิ่ม "ข้อยกเว้น" หรือ "ข้อผิดพลาด" ในชื่อตัวแปร
หากวิธีการส่งคืนคลาสควรระบุสิ่งที่ส่งคืนในชื่อ หากเป็นกระบวนการก็ควรระบุสิ่งที่มันทำ
เอกสาร
กรุณาใช้แท็บว่าง 4 แท็บเพื่อเยื้อง
หากตัวแก้ไขของคุณรองรับแท็กไฟล์โปรดเพิ่มบรรทัดต่อไปนี้เพื่อให้รหัสของเราอ่านง่ายขึ้น:
// vim: ts = 4: noet: tw = 0:
หมายเหตุของนักแปล: ชาวต่างชาติใช้บรรณาธิการ VIM บ่อยขึ้นดังนั้นคุณสามารถเลือกที่จะติดตามบทความนี้
การพับรหัสต้องดูเสร็จแล้วและมีเหตุผล:
การคัดลอกรหัสมีดังนี้:
var someexpression = expression1
+ Expression2
+ Expression3;
var o = someObject.get (
Expression1,
Expression2,
การแสดงออก 3
-
หมายเหตุ: การเยื้องของนิพจน์ควรสอดคล้องกับการประกาศตัวแปร
หมายเหตุ: พารามิเตอร์ของฟังก์ชันควรมีการเยื้องอย่างชัดเจนและกฎการเยื้องนั้นสอดคล้องกับบล็อกอื่น ๆ
ตัวแปร
เค้าโครง
ชิ้นส่วน
ตัวอย่างโค้ดปกติควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
ในขณะที่ (! isdone) {
Dosomething ();
isdone = moretodo ();
-
คำสั่ง IF ควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
ถ้า (somecondition) {
งบ
} อื่นถ้า (someothercondition) {
งบ
} อื่น {
งบ
-
คำสั่งสำหรับควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
สำหรับ (การเริ่มต้น; เงื่อนไข; อัปเดต) {
งบ
-
คำสั่งขณะนี้ควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
ในขณะที่ (! isdone) {
Dosomething ();
isdone = moretodo ();
-
Do …คำสั่งขณะนี้ควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
ทำ {
งบ
} ในขณะที่ (เงื่อนไข);
คำสั่งสวิตช์ควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
สวิตช์ (เงื่อนไข) {
กรณี ABC:
งบ
// fallthrough
กรณี def:
งบ
หยุดพัก;
ค่าเริ่มต้น:
งบ
หยุดพัก;
-
ความพยายาม…คำสั่งจับควรมีลักษณะเช่นนี้:
การคัดลอกรหัสมีดังนี้:
พยายาม {
งบ
} catch (ex) {
งบ
} ในที่สุด {
งบ
-
บรรทัดเดียวถ้าอื่นในขณะที่หรือสำหรับคำสั่งจะต้องรวมอยู่ในวงเล็บ แต่สามารถเขียนได้เช่นนี้:
if (เงื่อนไข) {คำสั่ง; -
ในขณะที่ (เงื่อนไข) {คำสั่ง; -
สำหรับ (Intialization; เงื่อนไข; อัปเดต) {คำสั่ง; -
ว่างเปล่า
ความเห็น
เอกสาร
ต่อไปนี้มีฟังก์ชั่นพื้นฐานหรือวัตถุคำอธิบายวิธีการ:
สรุป: คำอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของฟังก์ชั่นนี้หรือการใช้งานวัตถุ
คำอธิบาย: คำอธิบายสั้น ๆ ของฟังก์ชั่นหรือคลาสนี้
return: อธิบายสิ่งที่ฟังก์ชั่นนี้ส่งคืน (ไม่รวมประเภทการส่งคืน)
ข้อมูลฟังก์ชั่นพื้นฐาน
การคัดลอกรหัสมีดังนี้:
การทำงาน(){
// สรุป: เร็ว ๆ นี้เราจะมีสมบัติเพียงพอที่จะปกครองนิวเจอร์ซีย์ทั้งหมด
// คำอธิบาย: หรือเราอาจได้รับเพื่อนร่วมห้องใหม่
// ดูสิคุณไปหาเขา เขาไม่ตะโกนใส่คุณ
// ทั้งหมดที่ฉันพยายามทำคือทำให้เขายิ้มและร้องเพลงรอบ ๆ
// เขาและเต้นรำไปรอบ ๆ เขาและเขาก็วางไว้ในตัวฉัน
// เขาบอกให้ฉันเข้าไปในช่องแช่แข็งเพราะมีงานรื่นเริงอยู่ในนั้น
// returns: ดูเทป Bananarama!
-
ข้อมูลฟังก์ชันวัตถุ
ไม่มีคำอธิบายค่าส่งคืน
การคัดลอกรหัสมีดังนี้:
-
// สรุป: Dingle, Engage the Rainbow Machine!
// คำอธิบาย:
// บอกคุณว่าฉันหวังว่าฉันจะเป็น-โอ้จี-ลำแสงของฉัน
// ขึ้นมาแบบนั้นความเร็วคุณอาจต้องการปรับมัน
// มันทำตัวเลขบนหลังของฉันจริงๆที่นั่น ฉันหมายถึงและฉันไม่
// อยากจะบอกว่า Whiplash เพียงเพราะมันไกลเกินไป
// แต่คุณได้รับบาดเจ็บใช่มั้ย
-
การประกาศฟังก์ชั่น
ในบางกรณีการโทรและการประกาศฟังก์ชั่นนั้นมองไม่เห็น ในกรณีนี้เราไม่มีวิธีที่จะรวมคำแนะนำ ฯลฯ (สำหรับการโทรโปรแกรม) ในฟังก์ชั่น หากคุณพบสถานการณ์นี้คุณสามารถใช้คลาสเพื่อห่อหุ้มฟังก์ชั่น
หมายเหตุ: วิธีนี้สามารถใช้งานได้โดยไม่ต้องใช้พารามิเตอร์ที่เริ่มต้นของฟังก์ชันเท่านั้น ถ้าไม่พวกเขาจะถูกเพิกเฉย
การคัดลอกรหัสมีดังนี้:
dojo.declare (
"ฟู",
โมฆะ,
-
// สรุป: วุ้นนี่คือการผ่อนคลาย frylock
// คำอธิบาย:
// หลายพันปีก่อนก่อนรุ่งอรุณของ
// ผู้ชายที่เรารู้จักเขามีเซอร์ซานต้าแห่งแคลส: แอน
// ความคิดสร้างสรรค์เหมือนลิงทำให้ของเล่นดิบและไม่มีจุดหมาย
// ของ dino-bones เหวี่ยงพวกเขาด้วยความคิดสร้างสรรค์เหมือนชิมแปนซีด้วย
// มือย่นไม่ว่าพวกเขาจะประพฤติตนอย่างไร
// ปีที่แล้ว
// returns: เว้นแต่ว่า Carl จะจ่ายค่าธรรมเนียมให้กับ Elfin Elders ในอวกาศ
-
-
<h3> พารามิเตอร์ </h3>
<ol>
<li> ประเภทง่ายๆ
ประเภทของพารามิเตอร์ง่าย ๆ สามารถแสดงความคิดเห็นและอธิบายโดยตรงในนิยามพารามิเตอร์ฟังก์ชัน
[cc lang = "javascript"] ฟังก์ชั่น (/*สตริง*/ foo,/*int*/ bar) ...
พารามิเตอร์ประเภทตัวแปร
นี่คือตัวดัดแปลงบางอย่างสำหรับการอ้างอิง:
- พารามิเตอร์เสริม
... ช่วงพารามิเตอร์ของใบหน้าไม่แน่นอน
อาร์เรย์
function (/*string?*/ foo, /*int...*/ bar,/*string []*/ baz) ...
คำอธิบายพารามิเตอร์ทั่วโลก
หากคุณต้องการเพิ่มคำอธิบายคุณสามารถย้ายไปยังบล็อกการเริ่มต้น
รูปแบบข้อมูลพื้นฐานคือ: * คีย์ * ฟิลด์คำอธิบาย ( * คีย์ * คำอธิบายประโยค)
รูปแบบของพารามิเตอร์และตัวแปรคือ:*คีย์*~*ประเภท*~ คำอธิบาย (*คีย์*~*ประเภท*~ คำอธิบายประโยค)
หมายเหตุ:*คำหลัก*และ ~*type*~ สามารถแสดงในตัวอักษรและตัวเลขใด ๆ
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น (foo, bar) {
// foo: สตริง
// ใช้สำหรับการเป็นพารามิเตอร์แรก
// bar: int
// ใช้เป็นพารามิเตอร์ที่สอง
-
ตัวแปร
เนื่องจากการประกาศของตัวแปรอินสแตนซ์ตัวแปรต้นแบบและตัวแปรภายนอกมีความสอดคล้องกันจึงมีวิธีการหลายวิธีในการประกาศและแก้ไขตัวแปร คำจำกัดความและการวางตำแหน่งเฉพาะควรระบุชื่อประเภทขอบเขตและข้อมูลอื่น ๆ ของตัวแปรที่ตำแหน่งแรกที่ตัวแปรปรากฏขึ้น
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น foo () {
// mystring: สตริง
// Times: 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: สตริง
// ค่าง่าย ๆ อื่น ๆ
-
ค่าส่งคืน
เนื่องจากฟังก์ชั่นสามารถส่งคืนค่า (ประเภท) ที่แตกต่างกันหลายค่าในเวลาเดียวกันควรเพิ่มค่าคืนแต่ละค่าลงในความคิดเห็นของประเภทการส่งคืน ความคิดเห็นเป็นเพียงความคิดเห็นในบรรทัด หากค่าส่งคืนทั้งหมดเป็นประเภทเดียวกันประเภทที่ส่งคืนจะถูกระบุ; หากมีค่าส่งคืนที่แตกต่างกันหลายค่าประเภทการส่งคืนจะถูกทำเครื่องหมายเป็น "ผสม"
การคัดลอกรหัสมีดังนี้:
การทำงาน() {
if (arguments.length) {
กลับ "คุณผ่านข้อโต้แย้ง"; // สตริง
} อื่น {
กลับเท็จ; // บูลีน
-
-
Pseudocode (จะกล่าวถึง)
บางครั้งคุณต้องเพิ่มคำอธิบายกระบวนการที่ใช้งานได้สำหรับฟังก์ชั่นและคลาสนี้ในฟังก์ชั่นหรือคลาส หากคุณวางแผนที่จะทำสิ่งนี้คุณสามารถใช้ /*======== (= อักขระควรปรากฏขึ้น 5 เท่าหรือมากกว่า) ข้อดีของสิ่งนี้คือคุณไม่จำเป็นต้องเพิ่มสิ่งเหล่านี้ลงในรหัส (หมายเหตุของนักแปล: ผู้เขียนต้นฉบับอาจหมายถึงระบบการจัดการรหัส)
ด้วยวิธีนี้จะมีความคิดเห็นที่ยาวมากใน /*===== และ =====* / คุณสามารถพิจารณาได้ว่าจะลบหลังจากฟังก์ชั่นหรือไม่
การคัดลอกรหัสมีดังนี้:
-
module.pseudo.kwargs = {
// url: สตริง
// ตำแหน่งของไฟล์
URL: "",
// mimetype: String
// text/html, text/xml ฯลฯ
mimetype: ""
-
-
ฟังก์ชัน (/*module.pseudo.kwargs*/ kwargs) {
dojo.debug (kwargs.url);
dojo.debug (kwargs.mimetype);
-
ลิงค์ดั้งเดิม: http://dojotoolkit.org/developer/styleguide
แปลโดย: i.feelinglucky {at} gmail.com จาก http://www.gracecode.com