qingrui li เรียบเรียงและใส่คำอธิบายประกอบตาม Object Pascal Style Guide ของ Charles Calvert
หมายเหตุ: คนจำนวนมากที่ใช้ Delphi ไม่สนใจรูปแบบการเขียนโค้ด และมักจะเขียนโค้ดที่ไม่ได้มาตรฐาน ซึ่งทำให้ผู้อื่นเข้าใจได้ยากและมีแนวโน้มที่จะเกิดข้อผิดพลาด ฉันหวังว่าบทความนี้สามารถกระตุ้นให้ผู้ที่ชื่นชอบ Delphi ส่วนใหญ่รวมเป็นหนึ่งเดียวกับสไตล์มาตรฐานและก้าวไปข้างหน้าด้วยกัน
บทความนี้จะอธิบายสไตล์มาตรฐานสำหรับการจัดรูปแบบโค้ด Delphi สไตล์ย่อยนี้มีพื้นฐานมาจากแบบแผนการเขียนโค้ดของทีมพัฒนา Delphi เรารับทราบว่าซอร์สโค้ดยอดนิยมจำนวนมากใช้สไตล์ที่แตกต่างจากของเรา แต่เราขอแนะนำอย่างยิ่งให้ใช้สไตล์ Borland ในชุมชนซอร์สโค้ดสาธารณะ
Delphi เป็นภาษาที่สวยงาม และข้อดีที่สำคัญที่สุดประการหนึ่งก็คือสามารถอ่านได้ มาตรฐานนี้ได้รับการออกแบบมาเพื่อเพิ่มความสามารถในการอ่าน เมื่อนักพัฒนาปฏิบัติตามมาตรฐานนี้ นักพัฒนาทุกคนจะได้รับประโยชน์จากรูปแบบที่สอดคล้องกันและอ่านง่าย ความพยายามในการบังคับใช้มาตรฐานสไตล์สามารถเพิ่มมูลค่าของซอร์สโปรแกรมได้ โดยเฉพาะในระหว่างรอบการดีบักและการบำรุงรักษา
รูปแบบการตั้งชื่อ InfixCaps
ชื่อเรียกอีกอย่างว่า CamelCaps ประกอบด้วยคำหลายคำที่แสดงความหมาย โดยอักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ และที่เหลือเป็นตัวพิมพ์เล็ก
เช่น: MyFile, IntToStr, รายการ
Delphi ไม่ได้ใช้สัญกรณ์ภาษาฮังการีและแนะนำชื่อที่มีความหมาย ตัวอย่างเช่น ใช้ AppName แทน lpszAppName ใช้ Successful แทน bSuccess และใช้ ClientRect แทน lPRectClientRect
การตั้งชื่อไฟล์ต้นฉบับ
ใช้แบบฟอร์ม InfixCaps หากกำลังแปลงไฟล์ส่วนหัว C/C++ ให้ใช้ชื่อเดียวกันกับไฟล์ส่วนหัวดั้งเดิม หากจำเป็นต้องรวมไฟล์ส่วนหัวหลายไฟล์เป็นหน่วยเดียว ให้ใช้ชื่อของไฟล์ส่วนหัวหลัก เช่น WinBase.h, Windows.h ถูกผสานเข้ากับ Windows.pas
แบบแผนการตั้งชื่อ
ยกเว้นคำสงวนและคำคำสั่งซึ่งเป็นตัวพิมพ์เล็กทั้งหมด ตัวระบุอื่นๆ จะใช้รูปแบบ InfixCaps
หมายเหตุ: ดูเหมือนว่าจะมีแนวโน้มล่าสุดในการใช้ตัวพิมพ์เล็กหรือตัวย่ออย่างง่ายสำหรับตัวแปรท้องถิ่นและพารามิเตอร์ที่เป็นทางการ
ข้อยกเว้นคือตัวระบุในไฟล์ส่วนหัวที่ transpiled จะคงรูปแบบดั้งเดิมไว้
ชื่อประเภททั้งหมดขึ้นต้นด้วย T (อักษรตัวแรกของ Type)
ชื่อฟังก์ชัน ขั้นตอน และวิธีใช้คำกริยาหรือวลีกริยา และตัวระบุอื่นๆ ใช้คำนามหรือวลีคำนาม
สมาชิกข้อมูลคลาสขึ้นต้นด้วย F (อักษรตัวแรกของฟิลด์)
สมาชิกประเภทการแจกแจงนำหน้าด้วยตัวย่อประเภทตัวพิมพ์เล็ก โดยปกติจะมีตัวอักษรสองตัว เช่น
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
ฟังก์ชันที่ส่งคืนค่าบูลีนจะขึ้นต้นด้วย Is เช่น IsVisible, IsResizable
การใช้พื้นที่สีขาว
แทรกบรรทัดว่างในตำแหน่งที่เหมาะสมเพื่อแยกส่วนต่างๆ ของโค้ด เช่น ระหว่างการประกาศคลาส การใช้งานฟังก์ชัน ฯลฯ
ตำแหน่งที่จะใช้ช่องว่าง: ทางด้านขวาของเครื่องหมายวรรคตอน ที่ด้านใดด้านหนึ่งของตัวดำเนินการไบนารี
โดยที่ไม่ควรเว้นวรรค:
ตัวอย่างที่ถูกต้อง:
ฟังก์ชัน TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
ตัวอย่างข้อผิดพลาด:
ฟังก์ชัน TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
การเยื้อง
ควรใช้การเว้นวรรคสองช่องและไม่ควรใช้อักขระแท็บ
โค้ดระหว่าง beginning...end ควรเยื้อง และ start...end ไม่ควรเยื้อง
เยื้องสองช่องว่างเมื่อดำเนินการต่อบรรทัด
ตัวอย่างที่ถูกต้อง:
ฟังก์ชัน CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; ถ้า ((X = Y) หรือ (Y = X) หรือ (Z = P) หรือ (F = J) จากนั้นเริ่มต้น S := J;สิ้นสุด;
ในขณะที่ (LongExpression1 หรือ LongExpression2) จะเริ่มต้น // DoSomething // DoSomethingElse;end;if (LongExpression1) หรือ (LongExpression2) หรือ (LongExpression3) จากนั้น
ใจดี
การประกาศชั้นเรียนจะจัดเรียงตามลำดับต่อไปนี้
เขตข้อมูล
วิธี
คุณสมบัติ
ลำดับชั้นการเข้าถึงถูกจัดระเบียบตามลำดับต่อไปนี้ ยกเว้นโค้ดที่สร้างโดยอัตโนมัติโดย IDE
ตัวสร้างและตัวทำลายจะถูกประกาศก่อนการประกาศวิธีการ เนื่องจาก TObject.Destroy เป็นฟังก์ชันเสมือนและ TObject.Free โทร Destroy อย่าใช้ชื่ออื่นสำหรับ destructor ตัวสร้างสามารถใช้ชื่ออื่นที่ไม่ใช่ Create แต่โดยทั่วไปแล้ววิธีที่ดีที่สุดคือใช้ Create
ตัวอย่าง:
TMyClass = class (TObject) สิ้นสุดการเผยแพร่สาธารณะที่ได้รับการป้องกันแบบส่วนตัว;
ควรประกาศข้อมูลในส่วนส่วนตัวและขึ้นต้นด้วย F (อักษรตัวแรกของช่อง)
ประเภท TMyClass = class (TObject) ส่วนตัว FMyData: Integer; function GetData: Integer; Procedure SetData (Value: Integer);
อินเทอร์เฟซเป็นไปตามกฎเดียวกัน