เอกสารนี้มีวัตถุประสงค์หลักเพื่อให้นักพัฒนา Delphi มีมาตรฐานการเขียนซอร์สโค้ด เช่นเดียวกับมาตรฐานการตั้งชื่อสำหรับโปรแกรมและไฟล์ เพื่อให้พวกเขาสามารถมีรูปแบบที่สอดคล้องกันในการปฏิบัติตามเมื่อเขียนโปรแกรม ด้วยวิธีนี้โปรแกรมเมอร์แต่ละคนจะเขียนโค้ดที่ผู้อื่นสามารถเข้าใจได้
การเยื้องหมายถึงช่องว่างสองช่องระหว่างแต่ละระดับ อย่าวางอักขระแท็บในซอร์สโค้ด เนื่องจากความกว้างของอักขระแท็บจะแตกต่างกันไปตามการตั้งค่าและยูทิลิตี้การจัดการโค้ดที่แตกต่างกัน (การพิมพ์ เอกสารประกอบ การควบคุมเวอร์ชัน ฯลฯ)
โดยใช้เมนู เครื่องมือ|สภาพแวดล้อม บนหน้าทั่วไปของกล่องโต้ตอบตัวเลือกสภาพแวดล้อม ให้ยกเลิกการเลือกกล่องกาเครื่องหมายใช้อักขระแท็บและการเติมเพิ่มเติม เพื่อไม่ให้บันทึกอักขระของแท็บ
ระยะขอบถูกกำหนดไว้ที่ 80 อักขระ โดยทั่วไปซอร์สโค้ดจะไม่เกินระยะขอบโดยการเขียนคำ แต่กฎนี้มีความยืดหยุ่นมากกว่า เมื่อใดก็ตามที่เป็นไปได้ ข้อความที่ยาวกว่าหนึ่งบรรทัดควรห่อด้วยเครื่องหมายจุลภาคหรือโอเปอเรเตอร์ หลังจากขึ้นบรรทัดใหม่แล้ว ควรเยื้องด้วยอักขระสองตัว
คำสั่งเริ่มต้นจะต้องอยู่ในบรรทัดเดียว ตัวอย่างเช่น บรรทัดแรกด้านล่างไม่ถูกต้อง แต่บรรทัดที่สองถูกต้อง:
สำหรับ i:=0 ถึง 10 do beginning // ผิด, start และ for อยู่ในบรรทัดเดียวกัน
สำหรับ i:=0 ถึง 10 do // ใช่ เริ่มที่บรรทัดอื่น
เริ่ม
กรณีพิเศษของกฎนี้คือเมื่อ start เป็นส่วนหนึ่งของคำสั่ง else เช่น:
ถ้าบางคำสั่ง = แล้ว
เริ่ม
-
จบ
เริ่มอย่างอื่น
คำชี้แจงอื่น ๆ ;
จบ;
หมายเหตุ: คำสั่งสิ้นสุดจะอยู่ในบรรทัดแยกกันเสมอ เมื่อ start ไม่ได้เป็นส่วนหนึ่งของคำสั่ง else คำสั่ง end ที่เกี่ยวข้องจะถูกเยื้องด้วยจำนวนเดียวกันกับคำสั่ง beginning
โดยปกติแล้วเราจะใช้ความคิดเห็นบล็อกประเภท "(*...*)" เพื่อแสดงความคิดเห็นโค้ดที่ไม่ได้ใช้ชั่วคราว เริ่มต้นจาก Delphi 2 บรรทัดได้รับการสนับสนุน ความคิดเห็น หากคุณตัดสินใจว่าจะไม่รองรับเวอร์ชันที่ต่ำกว่า Delphi 2.0 คุณสามารถใช้ความคิดเห็น "//" ได้
ไม่มีช่องว่างระหว่างวงเล็บเปิดและอักขระถัดไป ในทำนองเดียวกัน ไม่มีช่องว่างระหว่างวงเล็บปิดและอักขระก่อนหน้า ตัวอย่างต่อไปนี้แสดงให้เห็นถึงช่องว่างที่ถูกต้องและไม่ถูกต้อง
CallPRoc( พารามิเตอร์ ); // ผิดพลาด!
CallProc(พารามิเตอร์); // ถูกต้อง!
อย่าใส่วงเล็บเพิ่มเติมในคำสั่ง ในซอร์สโค้ด วงเล็บจะใช้เมื่อจำเป็นจริงๆ เท่านั้น ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานที่ถูกต้องและไม่ถูกต้อง:
ถ้า (I=42) แล้ว // เกิดข้อผิดพลาด วงเล็บจะซ้ำซ้อน
ถ้า (I=42) หรือ (J=42) แล้ว // ถูกต้อง ต้องใช้วงเล็บเหลี่ยม
คำและคีย์เวิร์ดที่สงวนไว้ในภาษา Object Pascal จะเป็นตัวพิมพ์เล็กทั้งหมดเสมอ ต่อไปนี้เป็นรายการคำสงวนของ Delphi 5:
และ | อาร์เรย์ | เช่น | asm |
เริ่ม | กรณี | ระดับ | ค่าคงที่ |
ตัวสร้าง | ผู้ทำลายล้าง | อินเทอร์เฟซที่แตกต่าง | กอง |
ทำ | ลงไป | อื่น | จบ |
ยกเว้น | การส่งออก | ไฟล์ | การสรุป |
ในที่สุด | สำหรับ | การทำงาน | ข้ามไป |
ถ้า | การดำเนินการ | ใน | สืบทอดมา |
การเริ่มต้น | แบบอินไลน์ | อินเตอร์เฟซ | เป็น |
ฉลาก | ห้องสมุด | ม็อด | ไม่มี |
ไม่ | วัตถุ | ของ | หรือ |
ออก | บรรจุ | ขั้นตอน | โปรแกรม |
คุณสมบัติ | ยก | บันทึก | ทำซ้ำ |
ทรัพยากร | ชุด | ชล | ฉีก |
เชือก | แล้ว | เธรดวาร์ | ถึง |
พยายาม | พิมพ์ | หน่วย | จนกระทั่ง |
การใช้งาน | var | ในขณะที่ | กับ |
เอ็กซ์ออร์ | ส่วนตัว | ได้รับการคุ้มครอง | สาธารณะ |
ที่ตีพิมพ์ | อัตโนมัติ |
ชื่อขั้นตอนควรขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่และสับเปลี่ยนเพื่อให้อ่านง่าย ต่อไปนี้เป็นวิธีการเขียนที่ไม่ถูกต้อง:
ขั้นตอนนี้จัดรูปแบบไม่เป็นระเบียบชื่อประจำ;
เพียงเปลี่ยนเป็นสิ่งนี้:
ขั้นตอน ThisIsMuchMoreReadableRoutineName;
เมื่อใดก็ตามที่เป็นไปได้ ควรจัดกลุ่มพารามิเตอร์ประเภทเดียวกันไว้ด้วยกัน:
ขั้นตอน Foo (Param1, Param2, Param3: Imteger; Param4: string);
ลำดับของพารามิเตอร์ที่เป็นทางการส่วนใหญ่ขึ้นอยู่กับกฎการเรียกรีจิสเตอร์ พารามิเตอร์ที่ใช้บ่อยที่สุดควรเป็นพารามิเตอร์ตัวแรก เรียงจากซ้ายไปขวาตามลำดับความถี่ในการใช้งาน พารามิเตอร์อินพุตอยู่ข้างหน้าพารามิเตอร์เอาต์พุต ควรวางพารามิเตอร์ที่มีช่วงกว้างก่อนพารามิเตอร์ที่มีช่วงน้อย ตัวอย่างเช่น:
SomeProc (aPlanet, aContinent, aCountry, aState, aCity)
บางส่วนเป็นข้อยกเว้น ตัวอย่างเช่น ในระหว่างการประมวลผลเหตุการณ์ พารามิเตอร์ผู้ส่งประเภท TObject มักจะเป็นพารามิเตอร์แรกที่จะส่งผ่าน
เพื่อป้องกันไม่ให้พารามิเตอร์ของเรกคอร์ด อาร์เรย์ สตริงแบบสั้น หรือประเภทอินเทอร์เฟซถูกแก้ไขโดยขั้นตอน พารามิเตอร์ที่เป็นทางการควรทำเครื่องหมายว่า Const ด้วยวิธีนี้ คอมไพลเลอร์จะสร้างโค้ดด้วยวิธีที่มีประสิทธิภาพสูงสุด เพื่อให้แน่ใจว่าพารามิเตอร์ที่ส่งผ่านจะไม่เปลี่ยนรูป
หากกระบวนการไม่คาดว่าจะแก้ไขพารามิเตอร์ประเภทอื่น ก็สามารถทำเครื่องหมายว่า Const ได้เช่นกัน แม้ว่าสิ่งนี้จะไม่ส่งผลกระทบต่อประสิทธิภาพ แต่ก็ทำให้ผู้เรียกกระบวนการได้รับข้อมูลเพิ่มเติม
ตัวแปรท้องถิ่นจะถูกใช้ภายในขั้นตอน หากจำเป็น ควรเตรียมใช้งานตัวแปรทันทีที่รายการของขั้นตอน ตัวแปรประเภท AnsiString ภายในจะเริ่มต้นโดยอัตโนมัติเป็นสตริงว่าง ตัวแปรอินเทอร์เฟซภายในเครื่องและตัวแปรประเภท dispinterface จะถูกเตรียมใช้งานเป็นศูนย์โดยอัตโนมัติ และตัวแปรประเภท Local Variant และ OleVariant จะเตรียมใช้งานเป็น Unsigned โดยอัตโนมัติ
โดยทั่วไปแล้วเราไม่สนับสนุนการใช้ตัวแปรร่วม อย่างไรก็ตามบางครั้งก็จำเป็น ถึงกระนั้นก็ตาม ตัวแปรโกลบอลควรถูกจำกัดให้อยู่ในสภาพแวดล้อมที่จำเป็นเท่านั้น ตัวอย่างเช่น ตัวแปรโกลบอลอาจเป็นโกลบอลเฉพาะกับส่วนการใช้งานของหน่วยเท่านั้น
ข้อมูลส่วนกลางที่จะใช้โดยหลายหน่วยควรถูกย้ายไปยังหน่วยทั่วไปและใช้งานโดยออบเจ็กต์ทั้งหมด ข้อมูลส่วนกลางสามารถเตรียมใช้งานเป็นค่าได้โดยตรงเมื่อมีการประกาศ โปรดทราบว่าตัวแปรส่วนกลางทั้งหมดจะมีการกำหนดค่าเริ่มต้นเป็นศูนย์โดยอัตโนมัติ ดังนั้นอย่ากำหนดค่าเริ่มต้นให้กับตัวแปรส่วนกลางเป็นค่าว่าง เช่น 0, ไม่มี หรือไม่ได้กำหนด ตัวแปรส่วนกลางที่เริ่มต้นเป็นศูนย์จะไม่ใช้พื้นที่ในไฟล์ .EXE ข้อมูลที่เริ่มต้นเป็นศูนย์จะถูกจัดเก็บไว้ในเซ็กเมนต์ข้อมูลเสมือน และเซ็กเมนต์ข้อมูลเสมือนจะจัดสรรหน่วยความจำเมื่อแอปพลิเคชันเริ่มทำงานเท่านั้น ข้อมูลส่วนกลางที่เตรียมใช้งานที่ไม่ใช่ศูนย์จะใช้พื้นที่ในไฟล์ .EXE
ตัวระบุประเภทเป็นคำสงวนและควรเป็นตัวพิมพ์เล็กทั้งหมด ประเภท Win32 API มักจะเป็นตัวพิมพ์ใหญ่ทั้งหมดและเป็นไปตามกฎสำหรับชื่อประเภทเฉพาะใน Windows.pas หรือหน่วย API อื่น ๆ สำหรับชื่อตัวแปรอื่นๆ ตัวอักษรตัวแรกควรเป็นตัวพิมพ์ใหญ่ และตัวอักษรอื่นๆ ควรเป็นตัวพิมพ์สลับกัน นี่คือตัวอย่างบางส่วน:
var
MyString: string; // คำสงวน
WindowsHandle: HWND; // ประเภท Win32 API
I: Integer; //ตัวระบุประเภทที่แนะนำในหน่วยระบบ
ไม่แนะนำให้ใช้ประเภท Real เนื่องจากสงวนไว้สำหรับความเข้ากันได้กับรหัส Pascal ที่เก่ากว่าเท่านั้น โดยปกติแล้ว Double ควรใช้สำหรับตัวเลขทศนิยม Double สามารถปรับให้เหมาะสมโดยโปรเซสเซอร์และเป็นรูปแบบข้อมูลมาตรฐานที่กำหนดโดย IEEE สามารถใช้ส่วนขยายได้เมื่อต้องการช่วงที่ใหญ่กว่า Double Provide Extended เป็นประเภทเฉพาะของ Intel และไม่รองรับ Java เมื่อจำนวนไบต์จริงของตัวแปรจุดลอยตัวเป็นสิ่งสำคัญ (อาจใช้ภาษาอื่นในการเขียน DLL) ควรใช้ค่าเดี่ยว
โดยทั่วไปไม่แนะนำให้ใช้ Variant และ OleVariant อย่างไรก็ตาม ทั้งสองประเภทนี้จำเป็นสำหรับการเขียนโปรแกรมเมื่อทราบประเภทข้อมูลเฉพาะตอนรันไทม์เท่านั้น (มักอยู่ใน COM และแอปพลิเคชันฐานข้อมูล) เมื่อทำการเขียนโปรแกรม COM เช่น การควบคุม ActiveX อัตโนมัติ คุณควรใช้ OleVariant สำหรับการเขียนโปรแกรมที่ไม่ใช่ COM คุณควรใช้ Variant เนื่องจาก Variant สามารถบันทึกสตริงดั้งเดิมของ Delphi ได้อย่างมีประสิทธิภาพ ในขณะที่ OleVariant แปลงสตริงทั้งหมดเป็นสตริง OLE (เช่น สตริง WideChar) และไม่มีฟังก์ชันการนับการอ้างอิง
ในคำสั่ง if/then/else กรณีการดำเนินการที่มีแนวโน้มมากที่สุดควรวางไว้ในส่วนคำสั่ง then และกรณีที่มีแนวโน้มน้อยกว่าควรวางไว้ในส่วนคำสั่ง else หากต้องการหลีกเลี่ยงคำสั่ง if จำนวนมาก ให้ใช้คำสั่ง case แทน หากมีมากกว่า 5 ระดับ ห้ามใช้คำสั่ง if โปรดใช้วิธีที่ชัดเจนกว่านี้แทน อย่าใช้วงเล็บเพิ่มเติมในคำสั่ง if
หากมีหลายเงื่อนไขที่ต้องทดสอบในคำสั่ง if ก็ควรเรียงลำดับจากขวาไปซ้ายตามลำดับความซับซ้อนในการคำนวณ ซึ่งช่วยให้โค้ดสามารถใช้ประโยชน์จากตรรกะการประมาณค่าการลัดวงจรของคอมไพลเลอร์ได้อย่างเต็มที่ ตัวอย่างเช่น ถ้า Condition1 เร็วกว่า Condition2 และ Condition2 เร็วกว่า Condition3 โดยทั่วไปคำสั่ง if ควรถูกสร้างขึ้นดังนี้:
ถ้าเงื่อนไข 1 และเงื่อนไข 2 และเงื่อนไข 3 แล้ว
หากมีโอกาสสูงที่ Condition3 จะเป็นเท็จ โดยใช้ตรรกะการประมาณค่าการลัดวงจร เราก็สามารถใส่ Condition3 ไว้ที่ด้านหน้าได้เช่นกัน:
ถ้าเงื่อนไข 3 และเงื่อนไข 1 และเงื่อนไข 2 แล้ว
ค่าคงที่สำหรับแต่ละกรณีในคำสั่ง case ควรจัดเรียงตามลำดับตัวเลขหรือตัวอักษร คำชี้แจงการดำเนินการสำหรับแต่ละสถานการณ์ควรสั้นและโดยปกติจะมีโค้ดไม่เกิน 4 - 5 บรรทัด หากการดำเนินการซับซ้อนเกินไป ควรวางโค้ดไว้ในขั้นตอนหรือฟังก์ชันที่แยกจากกัน ส่วนคำสั่ง else ของคำสั่ง Case ใช้สำหรับกรณีเริ่มต้นหรือการตรวจหาข้อผิดพลาดเท่านั้น
คำสั่ง Case เป็นไปตามกฎการเยื้องและการตั้งชื่อปกติ
ไม่แนะนำให้ใช้ขั้นตอน Exit เพื่อออกจากลูป while หากจำเป็น ควรใช้เงื่อนไขลูปเพื่อออกจากลูป รหัสทั้งหมดที่เริ่มต้นการวนซ้ำ while ควรอยู่ก่อนรายการ while และไม่ควรถูกคั่นด้วยคำสั่งที่ไม่เกี่ยวข้อง งานเสริมใดๆ สำหรับธุรกิจควรดำเนินการทันทีหลังจากรอบการทำงาน
หากมีการกำหนดจำนวนลูป ควรใช้คำสั่ง for แทนคำสั่ง while
คำสั่งทำซ้ำจะคล้ายกับการวนซ้ำในขณะที่และเป็นไปตามกฎเดียวกัน
ควรใช้คำสั่ง with ด้วยความระมัดระวัง หลีกเลี่ยงการใช้คำสั่ง with มากเกินไป โดยเฉพาะอย่างยิ่งเมื่อใช้หลายอ็อบเจ็กต์หรือบันทึกภายในคำสั่ง with ตัวอย่างเช่น:
ด้วย Record1, Record2 ทำ
สถานการณ์เหล่านี้อาจทำให้โปรแกรมเมอร์สับสนและทำให้การแก้ไขจุดบกพร่องทำได้ยาก
คำสั่ง with ยังเป็นไปตามกฎของบทนี้สำหรับการตั้งชื่อและการเยื้อง
การจัดการข้อยกเว้นส่วนใหญ่จะใช้เพื่อแก้ไขข้อผิดพลาดและปกป้องทรัพยากร ซึ่งหมายความว่าทุกที่ที่มีการจัดสรรทรัพยากร พยายาม...ท้ายที่สุดจะต้องใช้เพื่อให้แน่ใจว่าทรัพยากรนั้นถูกปล่อยออกมา อย่างไรก็ตาม มีข้อยกเว้นเกิดขึ้นหากทรัพยากรถูกจัดสรร/เผยแพร่ในส่วนเริ่มต้น/สุดท้ายของหน่วย หรือในตัวสร้าง/ตัวทำลายของวัตถุ
หากเป็นไปได้ การจัดสรรทรัพยากรแต่ละรายการควรตรงกับโครงสร้างลอง...ในที่สุด ตัวอย่างเช่น รหัสต่อไปนี้อาจทำให้เกิดข้อผิดพลาด:
SomeClass1 := TSomeClass.Create;
SomeClass2 := TSomeClass.Create;
พยายาม
{ ทำโค้ด }
ในที่สุด
SomeClass1.ฟรี;
SomeClass2.ฟรี;
จบ;
วิธีแก้ปัญหาที่ปลอดภัยสำหรับการจัดสรรทรัพยากรข้างต้นคือ:
SomeClass1 := TSomeClass.Create;
พยายาม
SomeClass2 := TSomeClass.Create;
พยายาม
{ ทำโค้ด }
ในที่สุด
SomeClass2.ฟรี;
จบ;
ในที่สุด
SomeClass1.ฟรี;
จบ;
หากคุณต้องการทำงานบางอย่างเมื่อมีข้อยกเว้นเกิดขึ้น คุณสามารถใช้ try...ยกเว้น โดยปกติแล้ว ไม่จำเป็นต้องใช้ try...ยกเว้นเพียงแสดงข้อความแสดงข้อผิดพลาด เนื่องจากออบเจ็กต์ของแอปพลิเคชันสามารถทำสิ่งนี้ได้โดยอัตโนมัติตามบริบท หากคุณต้องการเปิดใช้งานการจัดการข้อยกเว้นเริ่มต้นในส่วนคำสั่ง คุณสามารถทริกเกอร์ข้อยกเว้นได้อีกครั้ง
ไม่แนะนำให้ใช้ try...ยกเว้นส่วนคำสั่ง else เนื่องจากจะบล็อกข้อยกเว้นทั้งหมด รวมถึงข้อยกเว้นที่คุณไม่ได้เตรียมรับมือด้วย
ชื่อขั้นตอนและฟังก์ชันควรมีความหมาย เป็นการดีที่สุดที่จะนำหน้าชื่อของกระบวนการในการดำเนินการด้วยคำกริยาที่แสดงออกถึงการกระทำ ตัวอย่างเช่น:
ขั้นตอน FormatHardDrive;
ชื่อของขั้นตอนการตั้งค่าพารามิเตอร์อินพุตควรนำหน้าด้วย Set เช่น:
ขั้นตอน SetUserName;
ชื่อของขั้นตอนในการรับค่าควรขึ้นต้นด้วย Get เช่น:
ฟังก์ชัน GetUserName:string;
ชื่อของพารามิเตอร์ที่เป็นทางการทั้งหมดควรแสดงถึงวัตถุประสงค์ หากเหมาะสม ชื่อของพารามิเตอร์ที่เป็นทางการควรขึ้นต้นด้วยตัวอักษร a เช่น:
ขั้นตอน SomeProc(aUserName:string; aUserAge:integer);
คำนำหน้า a จำเป็นเมื่อชื่อพารามิเตอร์มีชื่อเดียวกันกับแอตทริบิวต์คลาสหรือฟิลด์
เมื่อสองหน่วยมีโพรซีเดอร์ที่มีชื่อเหมือนกัน ถ้าโพรซีเดอร์ถูกเรียก โพรซีเดอร์ในหน่วยที่ปรากฏในภายหลังในส่วนคำสั่ง Uses จะถูกเรียกจริงๆ เพื่อหลีกเลี่ยงปัญหานี้ ให้เพิ่มชื่อหน่วยที่ต้องการก่อนชื่อวิธีการ เช่น:
SysUtils.FindClose(SR);
หรือ Windows.FindClose (ตัวจัดการ);
ชื่อของตัวแปรควรแสดงถึงวัตถุประสงค์ของมัน ตัวแปรควบคุมลูปมักเป็นตัวอักษรเดี่ยว เช่น I, J หรือ K คุณยังสามารถใช้ชื่อที่มีความหมายมากขึ้นได้ เช่น UserIndex ชื่อตัวแปรบูลีนต้องระบุความหมายของค่าจริงและเท็จอย่างชัดเจน
ตัวแปรท้องถิ่นเป็นไปตามกฎการตั้งชื่อของตัวแปรอื่นๆ
ตัวแปรร่วมจะขึ้นต้นด้วยอักษรตัวใหญ่ "G" และปฏิบัติตามกฎการตั้งชื่อตัวแปรอื่นๆ
ชื่อประเภทการแจงนับต้องแสดงถึงวัตถุประสงค์ของการแจงนับ อักขระ T ต้องนำหน้าชื่อเพื่อระบุว่าเป็นประเภทข้อมูล คำนำหน้าของรายการตัวระบุประเภทการแจงนับควรมีอักขระตัวพิมพ์เล็ก 2 - 3 ตัวเพื่อเชื่อมโยงถึงกัน ตัวอย่างเช่น:
TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
ชื่อของอินสแตนซ์ตัวแปรของประเภทการแจงนับจะเหมือนกับประเภท แต่ไม่มีคำนำหน้า T คุณยังสามารถตั้งชื่อพิเศษเพิ่มเติมให้กับตัวแปรได้ เช่น FavoriteSongTypel, FavoriteSongType2 เป็นต้น
ชื่อประเภทอาร์เรย์ควรแสดงถึงวัตถุประสงค์ของอาร์เรย์ ชื่อประเภทจะต้องนำหน้าด้วยตัวอักษร "T" หากคุณต้องการประกาศตัวชี้ให้กับประเภทอาร์เรย์ คุณต้องเพิ่มตัวอักษร P นำหน้าและประกาศก่อนการประกาศประเภท ตัวอย่างเช่น:
พิมพ์
PCycleArray = ^TCycleArray;
TCycleArray=array[1..100] ของจำนวนเต็ม;
ในความเป็นจริง อินสแตนซ์ตัวแปรของประเภทอาร์เรย์มีชื่อเดียวกับประเภท แต่ไม่มีคำนำหน้า "T"
ชื่อประเภทเรกคอร์ดควรแสดงถึงวัตถุประสงค์ของเรกคอร์ด ชื่อประเภทจะต้องนำหน้าด้วยตัวอักษร T หากคุณต้องการประกาศตัวชี้ไปยังประเภทบันทึก คุณต้องขึ้นหน้าด้วยตัวอักษร P และประกาศก่อนการประกาศประเภท ตัวอย่างเช่น:
พิมพ์
PEmployee = ^TEmployee;
พนักงาน=บันทึก
ชื่อพนักงาน: สตริง;
อัตราพนักงาน: สองเท่า;
จบ;
ชื่อของชั้นเรียนควรแสดงถึงวัตถุประสงค์ของชั้นเรียน โดยทั่วไปควรเพิ่มตัวอักษร "T" ก่อนชื่อคลาส หากเป็นคลาสอินเทอร์เฟซควรเพิ่ม "I" ก่อนชื่อคลาสควรเพิ่มชื่อคลาสของคลาสข้อยกเว้นข้อผิดพลาด และควรเพิ่มประเภทการอ้างอิงคลาส (ประเภทอ้างอิงคลาส) หน้าชื่อคลาส เพิ่ม "Class" หลังชื่อ ตัวอย่างเช่น:
พิมพ์
TCustomer = คลาส (TObject);
ICustomer = อินเทอร์เฟซ;
TCustomerClass = คลาสของ TCustomer
ECustomerException = คลาส (ข้อยกเว้น);
ชื่ออินสแตนซ์ของคลาสมักจะเหมือนกับชื่อคลาส โดยไม่มีคำนำหน้า "T"
var
ลูกค้า: TCustomer;
หมายเหตุ: สำหรับการตั้งชื่อส่วนประกอบ โปรดดู "ประเภทส่วนประกอบ"
การตั้งชื่อฟิลด์เป็นไปตามกฎเดียวกันกับตัวแปร ยกเว้นว่าจะมีการเพิ่มคำนำหน้า F เพื่อระบุว่านี่คือฟิลด์
ฟิลด์ทั้งหมดจะต้องเป็นแบบส่วนตัว หากคุณต้องการเข้าถึงฟิลด์ที่อยู่นอกขอบเขตของคลาส คุณสามารถทำได้โดยใช้แอตทริบิวต์คลาส
วิธีการตั้งชื่อเป็นไปตามกฎเดียวกันกับขั้นตอนและฟังก์ชัน
ควรใช้วิธีการคงที่เมื่อคุณไม่ต้องการให้วิธีการถูกแทนที่โดยคลาสที่ได้รับ
เมื่อคุณต้องการให้เมธอดถูกแทนที่โดยคลาสที่ได้รับ คุณควรใช้วิธีการเสมือน ถ้าเมธอดคลาสถูกใช้โดยตรงหรือโดยอ้อมโดยคลาสที่ได้รับหลายคลาส ควรใช้วิธีการไดนามิก (ไดนามิก) ตัวอย่างเช่น ถ้าคลาสมีเมธอดที่ถูกแทนที่บ่อยครั้งและมีคลาสที่ได้รับ 100 คลาส ควรกำหนดเมธอดนั้นเป็นไดนามิก ซึ่งสามารถลดโอเวอร์เฮดของหน่วยความจำได้
หากคลาสกำลังจะสร้างอินสแตนซ์ อย่าใช้วิธีนามธรรม วิธีการแบบนามธรรมสามารถใช้ได้เฉพาะในคลาสพื้นฐานที่ไม่เคยสร้างอินสแตนซ์เท่านั้น
วิธีการเข้าถึงคุณสมบัติทั้งหมดควรถูกกำหนดไว้ในส่วนส่วนตัวหรือที่ได้รับการป้องกันของชั้นเรียน วิธีการเข้าถึงคุณสมบัติเป็นไปตามกฎเดียวกันกับขั้นตอนและฟังก์ชัน วิธีที่ใช้สำหรับการอ่านควรขึ้นต้นด้วย "Get" วิธีการที่ใช้ในการเขียนควรขึ้นต้นด้วย "Set" และมีพารามิเตอร์ที่เรียกว่า Value ซึ่งมีประเภทเหมือนกับประเภทของคุณสมบัติ ตัวอย่างเช่น:
TSomeClass = คลาส (TObject)
ส่วนตัว
fsomeField: จำนวนเต็ม;
ได้รับการคุ้มครอง
ฟังก์ชัน GetSomeField: จำนวนเต็ม;
ขั้นตอน SetSomeField (ค่า: จำนวนเต็ม);
สาธารณะ
คุณสมบัติ SomeField: จำนวนเต็มอ่าน GetSomeField เขียน SetSomeField;
จบ;
แม้ว่าจะไม่จำเป็น แต่ขอแนะนำให้คุณใช้วิธีการเข้าถึงแบบเขียนเพื่อเข้าถึงคุณสมบัติที่แสดงถึงฟิลด์ส่วนตัว
คุณสมบัติทำหน้าที่เป็นตัวเข้าถึงฟิลด์ส่วนตัวและเป็นไปตามกฎการตั้งชื่อเดียวกันกับฟิลด์ ยกเว้นว่าไม่มีคำนำหน้า F ชื่อคุณสมบัติควรเป็นคำนาม ไม่ใช่คำกริยา คุณสมบัติคือข้อมูล และวิธีการคือการกระทำ ชื่อคุณสมบัติของอาร์เรย์ควรเป็นพหูพจน์ ในขณะที่คุณสมบัติทั่วไปควรเป็นเอกพจน์
การตั้งชื่อส่วนประกอบจะคล้ายกับการตั้งชื่อคลาส ยกเว้นว่าเมื่อขัดแย้งกับชื่อส่วนประกอบอื่น คุณสามารถเพิ่มคำนำหน้า 3 อักขระเพื่อระบุบริษัท บุคคล หรือเอนทิตีอื่น ๆ ได้ ตัวอย่างเช่น ส่วนประกอบนาฬิกาสามารถประกาศได้ดังนี้:
TddgClock = คลาส (TComponent)
โปรดทราบว่าอักขระสามตัวของคำนำหน้าจะต้องเป็นตัวพิมพ์เล็ก
ชื่อของอินสแตนซ์ส่วนประกอบควรจะสามารถอธิบายความหมายที่แท้จริงของมันได้ รูปแบบการตั้งชื่อที่นี่ใช้รูปแบบการตั้งชื่อคำนำหน้าภาษาฮังการีที่ได้รับการแก้ไข เหตุผลในการใช้คำนำหน้าแทนคำต่อท้ายคือการค้นหาชื่อส่วนประกอบใน Object Inspector และ Code Explorer ได้ง่ายกว่าการค้นหาประเภทของส่วนประกอบ ในมาตรฐานนี้ ชื่ออินสแตนซ์ของส่วนประกอบประกอบด้วยสองส่วน: คำนำหน้าและตัวระบุแอตทริบิวต์
คำนำหน้าของส่วนประกอบส่วนใหญ่เป็นคำย่อของประเภทส่วนประกอบ ดูคำนำหน้าส่วนประกอบในตารางด้านล่าง:
ชื่อคลาสส่วนประกอบ | คำนำหน้าส่วนประกอบ |
TActionList, TAction แสดงถึงรายการของการดำเนินการ | กระทำ |
TButton, TSpeedButton, TBitBtn และคลาสปุ่มอื่นๆ | บาท |
TCheckBox, TDBCheckBox และกล่องกาเครื่องหมายอื่น ๆ | ชเค |
คลาสปุ่มตัวเลือก TRadioButton | rdo |
แถบเครื่องมือ TToolBar | วัณโรค |
คลาสเมนูหลักทั้งหมดของ TMainMenu | มม |
คลาสรายการเมนูทั้งหมดของ TMainMenuItem | ไมล์ |
คลาสเมนูป๊อปอัปทั้งหมดของ TPopupMenu | น |
คลาสรายการเมนูป๊อปอัปทั้งหมดของ TPopupMenuItem | พีเอ็มไอ |
TLabel, TStaticText และคลาสป้ายกำกับอื่นๆ ที่ใช้สำหรับการแสดงผล | ปอนด์ |
TPanel และคลาสพาเนลอื่นๆ | ไม่ทราบ |
TPageControl และคลาสการควบคุมเพจอื่นๆ | พีจีซี |
TEdit, TMaskEdit และคลาสกล่องแก้ไขบรรทัดเดียวอื่นๆ | แก้ไข |
TMemo, TRichEdit และคลาสกล่องแก้ไขหลายบรรทัดอื่น ๆ | มม |
TDrawGrid, TStringGrid และคลาสกริดอื่นๆ | เกรด |
TAnimate และคลาสแอนิเมชั่นอื่นๆ | อานิ |
TImageList และคลาสรายการรูปภาพอื่น ๆ | ฉัน |
TImage และคลาสรูปภาพอื่นๆ | รูปภาพ |
คลาสแผนภูมิ TChart | ชท |
TComboBox, TDBComboBox และคลาสกล่องรายการแบบหล่นลงอื่น ๆ | ซีบีโอ |
TListBox, TDBList และคลาสกล่องรายการอื่นๆ | รายการ |
ทีทรีวิว | ทีวี |
TListView | เลเวล |
ทีฮอทคีย์ | ฮ่องกง |
TSplitter และคลาสตัวคั่นอื่นๆ | สปีต |
คลาสคอมโพเนนต์กล่องโต้ตอบทั้งหมด เช่น TOpenDialog | ดีแอลจี |
คลาสตารางข้อมูลทั้งหมด เช่น TTable | ตาราง |
ส่วนประกอบแบบสอบถาม SQL ทั้งหมด เช่น TQuery | คิวรี |
องค์ประกอบชุดข้อมูลไคลเอ็นต์ TClientDataSetAll | ซีดี |
TDataSource | ดีเอส |
ทีดาต้าเบส | ฐานข้อมูล |
TSockConnection, TDCOMConnection และคลาสส่วนประกอบการเชื่อมต่ออื่นๆ | แย้ง |
TQuickRep, TFastReport และคลาสส่วนประกอบรายงานอื่นๆ | รายงาน |
TDDEClientConv, TDDEClientItem และคลาสคอมโพเนนต์ DDE อื่นๆ | ดีดี |
คลาสปฏิทินทั้งหมด เช่น TMonthCalendar | แคลอรี่ |
TGroupBox และคลาสควบคุมอื่น ๆ | กลุ่ม |
ดังที่แสดงไว้ข้างต้น คำนำหน้าประเภทส่วนประกอบมาจากการวิเคราะห์คุณสมบัติประเภทที่อธิบายส่วนประกอบ โดยทั่วไป กฎต่อไปนี้จะอธิบายวิธีกำหนดคำนำหน้าประเภทส่วนประกอบ:
หมายเหตุ: คำนำหน้าของส่วนประกอบคือการระบุประเภทของส่วนประกอบ ไม่ว่าจะเป็นปุ่ม ป้ายกำกับ ฯลฯ ดังนั้นจึงไม่จำเป็นต้องสร้างคำนำหน้าส่วนประกอบสำหรับแต่ละคลาสส่วนประกอบพิเศษ ตัวอย่างเช่น คำนำหน้าส่วนประกอบของ TMyButton ยังคงเป็น btn
ชื่อการระบุคุณสมบัติของส่วนประกอบคือคำอธิบายจุดประสงค์ของส่วนประกอบ ตัวอย่างเช่น อินสแตนซ์คอมโพเนนต์ TButton ที่ใช้ในการปิดแบบฟอร์มอาจมีชื่อว่า btnClose อินสแตนซ์ขององค์ประกอบชื่อการแก้ไขสามารถตั้งชื่อ edName ได้
ชื่อของแบบฟอร์มหรือประเภทกล่องโต้ตอบควรแสดงถึงวัตถุประสงค์ของแบบฟอร์ม โดยนำหน้าด้วย "Tfrm" สำหรับแบบฟอร์ม หรือ "Tdlg" สำหรับกล่องโต้ตอบ ตามด้วยชื่อที่สื่อความหมาย ตัวอย่างเช่น ชื่อประเภทแบบฟอร์มเกี่ยวกับคือ:
TfrmAbout = คลาส (TForm)
ชื่อประเภทของแบบฟอร์มหลักคือ:
TfrmMain = คลาส (TForm)
ชื่อประเภทของแบบฟอร์มเข้าสู่ระบบของลูกค้าคือ:
TfrmCustomerEntry = คลาส (TForm)
ชื่อประเภทของกล่องโต้ตอบการเข้าสู่ระบบคือ:
TdlgLogin = คลาส (TForm)
ชื่อของอินสแตนซ์แบบฟอร์มเหมือนกับชื่อประเภทที่เกี่ยวข้อง แต่ไม่มีคำนำหน้า T ตัวอย่างเช่น ชื่อของประเภทแบบฟอร์มและอินสแตนซ์ที่กล่าวถึงก่อนหน้านี้คือ:
พิมพ์ชื่อ | ชื่ออินสแตนซ์ |
Tfrmเกี่ยวกับ | จากเกี่ยวกับ |
TfrmMain | จากหลัก |
Tfrmลูกค้ารายการ | จากรายการลูกค้า |
TdlgLogin | dlgLogin |
เว้นแต่จะมีเหตุผลพิเศษ เฉพาะแบบฟอร์มหลักเท่านั้นที่จะถูกสร้างขึ้นโดยอัตโนมัติ แบบฟอร์มอื่นๆ ทั้งหมดจะต้องถูกเอาออกจากรายการที่สร้างขึ้นโดยอัตโนมัติในกล่องโต้ตอบตัวเลือกโครงการ สำหรับข้อมูลเพิ่มเติม โปรดดูส่วนต่อไปนี้
หน่วยแบบฟอร์มทั้งหมดควรมีฟังก์ชันการสร้างอินสแตนซ์สำหรับการสร้าง การตั้งค่า การแสดงโมดอล และการนำแบบฟอร์มออกใช้ ฟังก์ชันนี้จะส่งคืนผลลัพธ์ของโหมดที่ส่งคืนโดยแบบฟอร์ม พารามิเตอร์ที่ส่งไปยังฟังก์ชันนี้เป็นไปตามกฎสำหรับการส่งพารามิเตอร์ เหตุผลของการห่อหุ้มเช่นนี้ก็เพื่ออำนวยความสะดวกในการใช้โค้ดซ้ำและการบำรุงรักษา
ตัวแปรของแบบฟอร์มควรถูกลบออกจากหน่วยและกำหนดเป็นตัวแปรภายในเครื่องในฟังก์ชันการสร้างอินสแตนซ์ของแบบฟอร์ม (โปรดทราบว่าการดำเนินการนี้จำเป็นต้องลบแบบฟอร์มออกจากรายการที่สร้างขึ้นโดยอัตโนมัติในกล่องโต้ตอบตัวเลือกโครงการ โปรดดูเนื้อหาก่อนหน้า
ตัวอย่างเช่น ไฟล์หน่วยต่อไปนี้สาธิตฟังก์ชันการสร้างอินสแตนซ์ GetUserData
หน่วย UserDataFrm;
อินเทอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม,
กล่องโต้ตอบ, StdCtrls;
พิมพ์
TfrmUserData = คลาส (TForm)
edtUserName: TEdit;
edtUserID: TEdit;
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
จบ;
ฟังก์ชั่น GetUserData (var aUserName: String; var aUserID: Integer): Word;
การดำเนินการ
{$R *.DFM}
ฟังก์ชั่น GetUserData (var aUserName: String; var aUserID: Integer): Word;
var
frmUserData: TfrmUserData;
เริ่ม
frmUserData := TfrmUserData.Create (แอปพลิเคชัน);
frmUserData.Caption:='การรับข้อมูลผู้ใช้';
ผลลัพธ์ : = frmUserData.ShowModal;
ถ้า Result=mrOK แล้ว
เริ่ม
aUserName := frmUserData.edtUserName.Text;
aUserID := StrToInt(frmUserData.edtUserID.Text);
จบ;
ในที่สุด
frmUserData.ฟรี;
จบ;
จบ;
จบ.
หากโครงสร้างฟอร์มซับซ้อนเกินไป จะต้องแบ่งออกเป็นเฟรมฟอร์มหลักและเฟรมฟอร์มย่อยหลายเฟรมที่ฝังอยู่ในเฟรมฟอร์มหลัก ชอบ:
TfrmMainFrame: TfrmInfoFrame,TfrmEditorFrame
วัตถุประสงค์หลักของการใช้ฟอร์มเฟรมคือเพื่อแก้ปัญหาการใช้อินเทอร์เฟซและโค้ดซ้ำ และเพื่อปรับปรุงการทำงานร่วมกันของโค้ดหน่วย (หลังจากแบ่งแล้ว แต่ละฟอร์มเฟรมจะเป็นหน่วยอิสระ) ซึ่งจะช่วยปรับปรุงคุณภาพของวิศวกรรมซอฟต์แวร์ คุณต้องแยกโค้ดที่เกี่ยวข้องกับอินเทอร์เฟซ (ใช้ซ้ำได้) และโค้ดที่เกี่ยวข้องกับแอปพลิเคชัน (ใช้ซ้ำไม่ได้)
ชื่อประเภทโมดูลข้อมูลควรแสดงถึงวัตถุประสงค์และขึ้นต้นด้วย "Tdm" ตามด้วยชื่อที่สื่อความหมาย ตัวอย่างเช่น ชื่อประเภทของโมดูลข้อมูลลูกค้าคือ:
TdmCustomer = คลาส (TDataModule)
ชื่อประเภทของโมดูลข้อมูลคำสั่งซื้อคือ:
TdmOrder = คลาส (TDataModule)
ชื่อของอินสแตนซ์โมดูลข้อมูลควรเหมือนกับชื่อประเภทที่เกี่ยวข้อง แต่ไม่มีคำนำหน้า T ตัวอย่างเช่น ประเภทโมดูลข้อมูลก่อนหน้าและชื่ออินสแตนซ์จะเป็นดังนี้:
พิมพ์ชื่อ | ชื่ออินสแตนซ์ |
ทีดีเอ็มลูกค้า | dmลูกค้า |
ทีดีเอ็มออร์เดอร์ | dmOrder |
ขอแนะนำให้ใช้ข้อมูลส่วนหัวของไฟล์ที่มีโครงสร้างในไฟล์ต้นฉบับ ไฟล์โครงการ และไฟล์หน่วยทั้งหมด ส่วนหัวของไฟล์ควรมีข้อมูลอย่างน้อยต่อไปนี้:
-
ลิขสิทธิ์ @ ปีโดยผู้เขียน
-
ชื่อไฟล์โครงการควรเป็นคำอธิบาย ตัวอย่างเช่น ชื่อโปรเจ็กต์ของ "The Delphi 5 Developer's Guide Bug Manager" คือ DDGBugs.dpr และชื่อของโปรแกรมข้อมูลระบบคือ SysInfo.dpr
ชื่อของไฟล์แบบฟอร์มควรแสดงถึงวัตถุประสงค์ของแบบฟอร์มและมีคำต่อท้าย Frm ตัวอย่างเช่น ชื่อไฟล์ของฟอร์มเกี่ยวกับคือ AboutFrm.dfm และชื่อไฟล์ของฟอร์มหลักคือ MainFrm.dfm
ชื่อของไฟล์โมดูลข้อมูลควรแสดงถึงบทบาทของโมดูลข้อมูลและมีส่วนต่อท้าย DM ตัวอย่างเช่น ชื่อไฟล์ของโมดูลข้อมูลลูกค้าคือ CustomersDM.dfm
ชื่อของไฟล์โมดูลข้อมูลรีโมตควรแสดงถึงวัตถุประสงค์ของโมดูลข้อมูลรีโมต เพิ่มส่วนต่อท้าย RDM หลังชื่อ ตัวอย่างเช่น ไฟล์สำหรับโมดูลข้อมูลระยะไกลของลูกค้าเรียกว่า CustomersRDM.dfm
ชื่อหน่วยควรเป็นคำอธิบาย ตัวอย่างเช่น หน่วยฟอร์มหลักของแอปพลิเคชันเรียกว่า MaimFrm.pas
ส่วนคำสั่งการใช้งานของส่วนอินเทอร์เฟซควรมีเฉพาะหน่วยที่จำเป็นสำหรับส่วนนั้นเท่านั้น อย่ารวมชื่อหน่วยที่ Delphi อาจเพิ่มโดยอัตโนมัติ ส่วนการใช้งานของส่วนการใช้งานควรมีเฉพาะหน่วยที่จำเป็นสำหรับส่วนนี้เท่านั้น และไม่มีหน่วยเพิ่มเติม
ส่วนอินเทอร์เฟซควรมีเฉพาะการประกาศประเภท ตัวแปร ขั้นตอน และฟังก์ชันที่จำเป็นต้องเข้าถึงโดยหน่วยภายนอก นอกจากนี้ คำประกาศเหล่านี้ควรอยู่ก่อนส่วนการนำไปปฏิบัติ
ส่วนการดำเนินการประกอบด้วยการดำเนินการประเภทส่วนตัว ตัวแปร ขั้นตอนและฟังก์ชันของหน่วยนี้
อย่าวางโค้ดที่ใช้เวลานานในส่วนการเตรียมใช้งาน มิฉะนั้นจะทำให้แอปพลิเคชันเริ่มทำงานช้ามาก
ตรวจสอบให้แน่ใจว่าได้ปล่อยทรัพยากรทั้งหมดที่จัดสรรไว้ในส่วนการเริ่มต้น
ชื่อของไฟล์หน่วยแบบฟอร์มจะเหมือนกับชื่อแบบฟอร์มที่เกี่ยวข้อง เพียงเปลี่ยนคำนำหน้าเป็นส่วนต่อท้าย ตัวอย่างเช่น ชื่อหน่วยของแบบฟอร์มเกี่ยวกับคือ AboutFrm.pas ชื่อไฟล์หน่วยของฟอร์มหลักคือ MainFrm.pas
ชื่อของไฟล์หน่วยโมดูลข้อมูลเหมือนกับชื่อโมดูลข้อมูลที่เกี่ยวข้อง ตัวอย่างเช่น ชื่อของหน่วยโมดูลข้อมูลคือ CustomersDM.pas
ชื่อของหน่วยทั่วไปควรแสดงถึงวัตถุประสงค์และควรนำหน้าด้วย "u" ตัวอย่างเช่น ชื่อของหน่วยเครื่องมือการดีบักเชิงปฏิบัติคือ uDebugUtilities.pas และชื่อของหน่วยที่มีตัวแปรโกลบอลคือ uCustomerGlobals.pas
โปรดทราบว่าชื่อหน่วยจะต้องไม่ซ้ำกันภายในโครงการ ชื่อหน่วยทั่วไปไม่สามารถมีชื่อเดียวกันได้
เซลล์ส่วนประกอบควรอยู่ในเส้นทางที่แยกจากกันเพื่อระบุว่าเป็นเซลล์ที่กำหนดส่วนประกอบ โดยทั่วไปจะไม่อยู่ในเส้นทางเดียวกันกับโครงการ ชื่อไฟล์หน่วยควรแสดงเนื้อหา
หมายเหตุ โปรดดู "มาตรฐานการตั้งชื่อสำหรับประเภทส่วนประกอบ" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับมาตรฐานการตั้งชื่อส่วนประกอบ
เซลล์ส่วนประกอบสามารถมีส่วนประกอบหลักได้เพียงองค์ประกอบเดียวเท่านั้น ซึ่งเป็นส่วนประกอบที่ปรากฏบนจานสีส่วนประกอบ ส่วนประกอบหรือวัตถุเสริมอื่นๆ สามารถรวมไว้ในยูนิตเดียวกันได้
กระบวนการลงทะเบียนส่วนประกอบควรย้ายออกจากหน่วยส่วนประกอบและวางไว้ในหน่วยแยกต่างหาก หน่วยการลงทะเบียนนี้ใช้เพื่อลงทะเบียนส่วนประกอบทั้งหมด ตัวแก้ไขคุณสมบัติ ตัวแก้ไขส่วนประกอบ ตัวช่วยสร้าง ฯลฯ
การลงทะเบียนส่วนประกอบควรทำในแพ็คเกจการออกแบบ ดังนั้น หน่วยการลงทะเบียนควรรวมอยู่ในแพ็คเกจเวลาออกแบบ แทนที่จะเป็นแพ็คเกจรันไทม์ ขอแนะนำให้ตั้งชื่อหน่วยการลงทะเบียนดังนี้:
xxxReg.pas
ในหมู่พวกเขา คำนำหน้าอักขระ xxx ใช้เพื่อระบุชื่อแพ็คเกจส่วนประกอบหรือบริษัท บุคคล หรือเอนทิตีอื่น ๆ ตัวอย่างเช่น หน่วยการลงทะเบียนชื่อ xxxReg.pas
แพ็คเกจรันไทม์ควรมีเฉพาะหน่วยที่จำเป็นเท่านั้น องค์ประกอบเหล่านั้นของตัวแก้ไขคุณสมบัติและตัวแก้ไขส่วนประกอบควรถูกวางไว้ในแพ็คเกจเวลาออกแบบ หน่วยการลงทะเบียนควรรวมอยู่ในแพ็คเกจขั้นตอนการออกแบบด้วย
การตั้งชื่อแพ็คเกจเป็นไปตามรูปแบบต่อไปนี้:
dcliiiDescvvCn.pkg — แพ็คเกจการออกแบบ
iiiDescvvCn.pkg —แพ็คเกจรันไทม์
ในหมู่พวกเขา iii หมายถึงคำนำหน้าอักขระ 2-3 ซึ่งใช้ในการระบุบริษัท บุคคล หรือสิ่งอื่น ๆ ที่จำเป็นต้องระบุ เป็นทางเลือก โดย Desc แสดงถึงคำอธิบายสั้น ๆ ของแพ็คเกจควบคุม; คุณสามารถเลือกได้ตามความต้องการของคุณ คำนำหน้า "dcl" ระบุถึงแพ็คเกจเวลาออกแบบ หากไม่มีคำนำหน้านี้จะระบุถึงแพ็คเกจรันไทม์; Delphi5=D5, Delphi4=D4, CBuilder3=C3....
โปรดทราบว่า lib หรือ std ในชื่อแพ็คเกจจะระบุว่านี่เป็นแพ็คเกจเวลาออกแบบหรือแพ็คเกจรันไทม์ตามลำดับ ตัวอย่างเช่น:
dclrbStdComPSD5.pkg — แพ็คเกจเวลาออกแบบ Delphi 5
rbStdCompsD5.pkg — แพ็คเกจรันไทม์ Delphi 5
แม้ว่าเครื่องมือการจัดรูปแบบอัตโนมัติของโค้ดส่วนใหญ่จะช่วยให้คุณสามารถจัดเรียงรูปแบบของโปรแกรมต้นฉบับใหม่และอัปเดตการใช้อักษรตัวพิมพ์ใหญ่ของคำที่สงวนไว้และตัวระบุได้ แต่วิธีที่ดีที่สุดคือดำเนินการนี้ก่อนที่จะใช้การควบคุมเวอร์ชัน หากคุณได้ใช้การควบคุมเวอร์ชันแล้ว ขอแนะนำให้คุณอย่า ใช้เครื่องมือจัดรูปแบบโค้ดอัตโนมัติได้อย่างง่ายดาย แม้ว่าจะมีช่องว่างเพิ่มขึ้นอีก 1 ช่อง แต่เครื่องมือควบคุมเวอร์ชันจะคิดว่ามีการแก้ไขบรรทัด จึงทำให้เกิดการเปลี่ยนแปลงในการจัดการโปรแกรม