คู่มือสไตล์ Object Pascal - โดย Charles Calvert
(คู่มือสไตล์การเข้ารหัสวัตถุ Pascal - แปลโดย: Tommy Tong)
เรารับทราบว่าสตูดิโอหรือบุคคลที่มีชื่อเสียงจำนวนมากมีวิธีการเขียนโปรแกรมของตนเองที่แตกต่างจากที่อธิบายไว้ในบทความนี้ อย่างไรก็ตาม เราขอแนะนำอย่างยิ่งให้คุณใช้เครื่องมือในการแปลงโค้ดของคุณเป็นโค้ดสไตล์ Borland จากนั้นจึงส่งไปที่ Borland โครงการ JEDI หรือที่เก็บซอร์สโค้ดสาธารณะอื่นๆ เราไม่ต้องการบังคับให้คุณเปลี่ยนนิสัย แต่เรายืนยันว่าโค้ดทั้งหมดที่ใช้ได้กับผลิตภัณฑ์ Borland เป็นไปตามนิสัยที่อธิบายไว้ในบทความนี้
Object Pascal เป็นภาษาการออกแบบที่สวยงาม ความสามารถในการอ่านที่ดีคือข้อดีประการหนึ่ง มาตรฐานที่ออกแบบในบทความนี้จะช่วยเพิ่มความสามารถในการอ่านโค้ด Object Pascal เมื่อนักพัฒนาปฏิบัติตามนิสัยง่ายๆ เหล่านี้ที่แสดงในบทความนี้ พฤติกรรมเหล่านั้นจะกลายเป็นมาตรฐานด้วย ซึ่งจะเป็นประโยชน์ต่อนักพัฒนา Delphi ทุกคนที่ใช้รูปแบบการเขียนโค้ดที่เป็นหนึ่งเดียวและอ่านง่าย ความพยายามในการบังคับใช้มาตรฐานเหล่านี้จะเพิ่มมูลค่าของซอร์สโค้ดสำหรับนักพัฒนา โดยเฉพาะในระหว่างขั้นตอนการบำรุงรักษาและการดีบัก
แม้ว่าเราจะเชื่อและชื่นชมสไตล์ที่โปรโมตในบทความนี้ แต่เราไม่จำเป็นต้องรับรองเพราะมันถูกต้องในตัวเองและผิดในผู้อื่น อย่างไรก็ตาม เราเชื่อว่ามาตรฐานที่นักพัฒนาส่วนใหญ่ปฏิบัติตามนั้นมีความถูกต้อง ดังนั้นเราจึงยังคงสนับสนุนและรักษารูปแบบนี้ไว้ สมองของมนุษย์มักจะปรับตัวเข้ากับมาตรฐานและหาวิธีจัดระเบียบรูปแบบที่คุ้นเคยอย่างรวดเร็วเพื่อให้สามารถเข้าใจความหมายของมันได้อย่างรวดเร็วและมีประสิทธิภาพ ข้อกำหนดนี้เองที่กำหนดมาตรฐานที่จะทำให้คนจำนวนมากอ่านโค้ดได้ง่ายที่สุดเท่าที่จะเป็นไปได้ หากแนวปฏิบัติของเรารู้สึกไม่คุ้นเคยกับคุณเป็นครั้งแรก เราขอให้คุณยึดถือหลักเกณฑ์ดังกล่าวสักพักหนึ่ง แล้วคุณจะพบว่าคุณคุ้นเคยกับหลักเกณฑ์ดังกล่าว หรือหากคุณต้องการ คุณสามารถคงสไตล์ของคุณเองและแปลงมันผ่านโปรแกรมที่เป็นไปตามมาตรฐานของเรา จากนั้นคุณสามารถส่งโค้ดของคุณไปที่ Borland หรือที่เก็บข้อมูลอื่น ๆ ได้
โปรแกรมแก้ไขข้อความบางตัว เช่น Visual SlickEdit สามารถช่วยคุณจัดรูปแบบโค้ดของคุณในรูปแบบที่ต้องการได้
ฟอร์แมตเตอร์ฟรีที่พัฒนาโดย Egbert van Nes มีอยู่ที่:
http://www.slm.wau.nl/wkao/delforexp.html
โปรแกรมเชิงพาณิชย์อื่นสำหรับ Delphi คือ CrackerJax:
http://www.kineticsoftware.com/html/products.html
-
1.0 บทนำ
บทความนี้ไม่ใช่ความพยายามที่จะกำหนดกฎไวยากรณ์สำหรับภาษา Object Pascal ตัวอย่างเช่น: การใส่ตราประทับ ";" ไว้หน้าสิ่งอื่นถือเป็นสิ่งผิดกฎหมาย ดังนั้นฉันจะไม่แสดงกฎไวยากรณ์ในบทความนี้ บทความนี้มีจุดมุ่งหมายเพื่อกำหนดพฤติกรรมที่เหมาะสมโดยที่ภาษามีตัวเลือกต่างๆ ฉันมักจะเงียบเมื่อมีวิธีการควบคุมเพียงวิธีเดียว
1.1 ความเป็นมา
แนวทางที่นำเสนอในบทความนี้อิงตามส่วนหนึ่งของซอร์สโค้ด Delphi ซอร์สโค้ด Delphi เป็นไปตามแนวทางเหล่านี้ทุกประการ หากคุณพบว่ามีการละเมิดหลักการเหล่านี้ หลักการเหล่านี้ควรเป็นแนวทางของคุณ ไม่ใช่ซอร์สโค้ดที่ไม่แน่นอน อย่างไรก็ตาม คุณสามารถใช้โค้ดต้นฉบับเป็นส่วนเสริมของหลักการเหล่านี้ได้ อย่างน้อยก็เพื่อช่วยให้คุณมีแนวคิดทั่วไปเกี่ยวกับรูปแบบของโค้ดของคุณเอง
1.2 ขอบคุณ
รูปแบบในบทความนี้ขึ้นอยู่กับงานที่ทำเพื่อกำหนดมาตรฐานสไตล์สำหรับภาษา Java Java ไม่มีอิทธิพลต่อกฎสำหรับการจัดรูปแบบซอร์สโค้ด Object Pascal แต่เอกสารประกอบบนเว็บไซต์ของ Sun เป็นพื้นฐานสำหรับบทความนี้ ในสถานที่พิเศษบางแห่ง สไตล์และรูปแบบของบทความนี้ได้รับแรงบันดาลใจอย่างมากจาก "คู่มือสไตล์การเขียนโค้ดสำหรับ Java WorkShop และการเขียนโปรแกรม Java Studio" (Achut Reddy, "คู่มือการเขียนโค้ดสำหรับ Java WorkShop และ Java Studio") สามารถดูบทความนี้ได้ที่ URL นี้: http://www.sun.com/workshop/java/wp-coding
ทีมงาน Delphi มีส่วนสำคัญในการจัดทำบทความนี้ให้เสร็จสิ้น ที่จริงแล้ว หากไม่ได้รับความช่วยเหลือจากพวกเขา บทความนี้ก็คงไม่สมบูรณ์
2.0 ไฟล์ต้นฉบับ
ซอร์สโค้ด Object Pascal ส่วนใหญ่แบ่งออกเป็นไฟล์ต้นฉบับเดียวและไฟล์โปรเจ็กต์ และทั้งหมดเป็นไปตามรูปแบบเดียวกัน ไฟล์โครงการ Delphi มีนามสกุล .DPR เป็นไฟล์หลักของโครงการ ไฟล์หน่วยใดๆ ที่ใช้ในโปรเจ็กต์จะมีนามสกุล .PAS ไฟล์อื่นๆ เช่น ไฟล์แบตช์ ไฟล์ HTML หรือ DLL ก็สามารถมีบทบาทในโปรเจ็กต์ได้เช่นกัน แต่บทความนี้ครอบคลุมเฉพาะไฟล์โปรเจ็กต์และไฟล์หน่วยเท่านั้น
2.1 การตั้งชื่อไฟล์ต้นฉบับ
Object Pascal รองรับชื่อไฟล์ที่ยาว หากคุณใช้คำหลายคำเพื่อสร้างชื่อเดียว วิธีที่ดีที่สุดคือใช้ตัวพิมพ์ใหญ่เริ่มต้นสำหรับแต่ละคำ: MyFile.pas นี่ถือเป็นวงเล็บหรือ CamelCase ส่วนขยายควรเป็นตัวพิมพ์เล็ก ด้วยเหตุผลทางประวัติศาสตร์ ซอร์สโค้ดของ Delphi มักจะใช้รูปแบบการตั้งชื่อ 8:3 แต่นักพัฒนาไม่จำเป็นต้องถูกจำกัดตามกฎข้างต้น และหันไปใช้การใช้งานของทีม Delphi
หากคุณกำลังแปลไฟล์ส่วนหัว C/C++ ไฟล์ Pascal ที่คุณแปลควรคงชื่อไฟล์หลักเหมือนกับไฟล์ส่วนหัว C/C++ และใช้ .PAS เป็นนามสกุล ตัวอย่างเช่น: Windows.h -> Windows.pas หากไวยากรณ์ Pascal บังคับให้คุณรวมไฟล์ส่วนหัวหลายไฟล์เป็นไฟล์ยูนิตเดียว ชื่อไฟล์ของไฟล์ส่วนหัวที่มีไฟล์ส่วนหัวอื่น ๆ จะถูกนำมาใช้เป็นชื่อของไฟล์ยูนิตใหม่ ตัวอย่างเช่น: Windows.h มีไฟล์ WinBase.h ดังนั้นไฟล์ยูนิตใหม่จะมีชื่อว่า Windows.pas
2.2 การจัดระเบียบไฟล์ต้นฉบับ
ไฟล์หน่วย Object Pascal ทั้งหมดควรมีองค์ประกอบต่อไปนี้ตามลำดับต่อไปนี้:
ความคิดเห็นที่ถูกบล็อกเกี่ยวกับลิขสิทธิ์/ข้อมูลประจำตัว
ชื่อหน่วย
ส่วนต่อประสาน
ส่วนการนำไปปฏิบัติ
ตัวยุติ "สิ้นสุด"
ควรมีบรรทัดว่างอย่างน้อยหนึ่งบรรทัดระหว่างแต่ละส่วน
องค์ประกอบอื่นๆ ควรจัดโครงสร้างตามลำดับที่คุณคิดว่าเหมาะสมที่สุด แต่ลิขสิทธิ์ควรปรากฏที่ตอนต้นของไฟล์ ตามด้วยชื่อหน่วย ตามด้วยคำจำกัดความแบบมีเงื่อนไข คำสั่งคอมไพเลอร์ หรือรวมข้อความสั่ง และตามด้วยคำสั่งย่อยของใช้:
{************************************************ * *****}
-
{ ไลบรารีส่วนประกอบภาพ Borland Delphi }
-
{ ลิขสิทธิ์ (c) 1995,98 Inprise Corporation }
-
{************************************************ * *****}
ปุ่ม หน่วย ;
{$S-,W-,R-}
{$C โหลดล่วงหน้า}
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, คลาส,
การควบคุม แบบฟอร์ม กราฟิก
StdCtrls, ExtCtrls, CommCtrl;
หากคุณใส่ส่วนประเภทไว้หน้าส่วน const หรือผสมทั้งสองส่วนเข้าด้วยกัน ก็จะไม่มีผลใดๆ
ส่วนการนำไปปฏิบัติจะต้องเขียนการนำไปปฏิบัติก่อน จากนั้นจึงเขียนส่วนคำสั่งuse จากนั้นส่วนอื่นๆ จะรวมการประกาศหรือตัวบ่งชี้อื่นๆ:
การดำเนินการ
การใช้งาน
Consts, SysUtils, ActnList,
ImgList;
{$R ปุ่ม.RES}
2.2.1 ความคิดเห็นเกี่ยวกับลิขสิทธิ์/ข้อมูลประจำตัว
ไฟล์ต้นฉบับทุกไฟล์ควรเริ่มต้นด้วยความคิดเห็นแบบบล็อกที่มีข้อมูลเวอร์ชันและประกาศลิขสิทธิ์มาตรฐาน ข้อมูลเวอร์ชันอาจมีลักษณะดังนี้:
{************************************************ * *****}
-
{ วิดเจ็ตมากมาย }
-
{ ลิขสิทธิ์ (c) 1995,98 บริษัทของคุณ }
-
{************************************************ * *****}
ประกาศเกี่ยวกับลิขสิทธิ์จะต้องมีบรรทัดต่อไปนี้เป็นอย่างน้อย:
ลิขสิทธิ์ (C) ปี เจ้าของลิขสิทธิ์
หากคุณเป็นบุคคลที่สามที่พัฒนาซอฟต์แวร์สำหรับ Borland คุณสามารถเพิ่มชื่อของคุณเองที่ส่วนท้ายของลิขสิทธิ์:
{************************************************ * *****}
-
{ ไลบรารีส่วนประกอบภาพ Borland Delphi }
{ ลิขสิทธิ์ (c) 1995,99 Borland International }
{ สร้างโดยโครงการ JEDI }
-
{************************************************ * *****}
2.2.2 ประกาศหน่วย
แต่ละไฟล์หน่วยจะต้องมีการประกาศหน่วย หน่วยเป็นคำสงวน จึงต้องเป็นตัวพิมพ์เล็ก ชื่อของหน่วยสามารถผสมได้ แต่ต้องเหมือนกับชื่อไฟล์ของไฟล์หน่วย ตัวอย่างเช่น:
หน่วย MyUnit;
จากนั้นชื่อของไฟล์หน่วยควรเป็น MyUnit.pas ในระบบไฟล์ จะทำหน้าที่เป็นรายการสำหรับไฟล์นี้
2.2.3 ใช้คำสั่ง
ภายในหน่วย การประกาศการใช้ควรเริ่มต้นด้วยการใช้งานที่น้อยกว่า ชื่อหน่วยที่อ้างอิงเป็นไปตามแบบแผนการใช้ตัวพิมพ์ใหญ่ที่ใช้เมื่อถูกกำหนดในหน่วยของตัวเอง:
ใช้ MyUnit;
ชื่อหน่วยแต่ละชื่อจะถูกแยกออกจากชื่อหน่วยที่อยู่ติดกันด้วยเครื่องหมายจุลภาค และชื่อหน่วยสุดท้ายจะตามด้วยเครื่องหมายอัฒภาค:
การใช้งาน
Windows, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม,
ประเภทข้อมูล;
นอกจากนี้ยังถูกต้องในการเพิ่มชื่อยูนิตโดยเริ่มจากบรรทัดถัดไปของการใช้งาน และเพิ่มชื่อยูนิตโดยตรงหลังการใช้งาน
ใช้ Windows, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม,
ประเภทข้อมูล;
คุณสามารถจัดรูปแบบรายการชื่อหน่วยให้มีความยาวไม่เกิน 80 อักขระ หรือให้มีหนึ่งบรรทัดต่อชื่อหน่วยได้
2.2.4 คำจำกัดความของคลาสและอินเทอร์เฟซ
คำจำกัดความของชั้นเรียนเริ่มต้นด้วยช่องว่าง 2 ช่อง ตามด้วยคำนำหน้า "T" คำนำหน้าควรเป็นตัวพิมพ์ใหญ่ และคำที่ฝังไว้แต่ละคำควรขึ้นต้นด้วยตัวพิมพ์ใหญ่ อย่าใช้อักขระแท็บ "Tab" ในซอร์สโค้ด Object Pascal ตัวอย่าง:
ทีมายคลาส
ติดตามตัวระบุด้วยการเว้นวรรค ตามด้วยเครื่องหมายเท่ากับ ตามด้วยคลาสคำ ซึ่งควรเป็นตัวพิมพ์เล็ก:
TMyClass = คลาส
หากคลาสของคุณสืบทอดมาจากบรรพบุรุษ คุณจะต้องเพิ่มวงเล็บซ้ายและขวาที่มีคลาสบรรพบุรุษ:
TMyClass = คลาส (TObject)
ตัวบ่งชี้ช่วงคือช่องว่างสองช่องจากระยะขอบและปรากฏตามลำดับต่อไปนี้:
TMyClass = คลาส (TObject)
ส่วนตัว
ปกป้อง
สาธารณะ
ที่ตีพิมพ์
จบ;
โดยทั่วไปข้อมูลจะถูกประกาศเฉพาะในส่วนส่วนตัวเท่านั้น และตัวระบุจะขึ้นต้นด้วย "F" ข้อความดังกล่าวทั้งหมดจะต้องมีช่องว่าง 4 ช่องจากระยะขอบ:
TMyClass = คลาส (TObject)
ส่วนตัว
FMyDate: จำนวนเต็ม;
ฟังก์ชัน GetDate: จำนวนเต็ม;
ขั้นตอน SetData (ค่า: จำนวนเต็ม);
สาธารณะ
ที่ตีพิมพ์
คุณสมบัติ MyData: จำนวนเต็มอ่าน GetData เขียน SetData;
จบ ;
อินเทอร์เฟซเป็นไปตามกฎเดียวกันกับอินเทอร์เฟซ ยกเว้นว่าคุณควรละเว้นตัวบ่งชี้ขอบเขตและข้อมูลส่วนตัว และใช้คำว่าอินเทอร์เฟซแทนคลาสคำ
แบบแผนการตั้งชื่อ
ยกเว้นคำสงวนและตัวบ่งชี้ซึ่งเป็นตัวพิมพ์เล็ก ตัวระบุ Pascal ทั้งหมดควรใช้รูปแบบ CamelCase กล่าวคือ ตัวอักษรตัวแรกของตัวระบุแต่ละตัวควรเป็นตัวพิมพ์ใหญ่ และอักษรตัวแรกของคำที่ฝังตัวควรเป็นตัวพิมพ์ใหญ่ด้วย ที่รับเฉพาะอักษรตัวแรกเท่านั้น
ตัวระบุของฉัน
MyFTPClass
ข้อยกเว้นหลักสำหรับกฎนี้คือกรณีของการแปลไฟล์ส่วนหัว ซึ่งควรเป็นไปตามหลักการตั้งชื่อในไฟล์ส่วนหัวดั้งเดิม ตัวอย่างเช่น:
WM_LBUTTONDOWN ห้ามเขียน wm_LButtonDown
ยกเว้นการแปลไฟล์ส่วนหัว ห้ามใช้เครื่องหมายขีดล่างเพื่อแยกคำ ชื่อคลาสควรเป็นคำนามหรือวลีนาม ชื่อของอินเทอร์เฟซหรือคลาสขึ้นอยู่กับวัตถุประสงค์ที่ชัดเจนและการใช้อินเทอร์เฟซ
ชื่อที่ดี:
AddressForm, ArrayIndexOutOfBoundsException
ชื่อที่ไม่ดี:
ManageLayout //ใช้คำกริยาวลี
delphi_is_new_to_me //ใช้ขีดเส้นใต้
3.1 การตั้งชื่อหน่วย
ดูประกาศหน่วย
3.2 การตั้งชื่อคลาส/อินเทอร์เฟซ
ดูการประกาศคลาส/อินเทอร์เฟซ
3.3 การตั้งชื่อโดเมน/ฟิลด์
ใช้รูปแบบ CamelCase เริ่มต้นด้วยตัวพิมพ์ใหญ่ "F" และประกาศข้อมูลทั้งหมดเป็นการส่วนตัว โดยใช้คุณสมบัติหรือ getters และ setters เพื่อให้สาธารณะเข้าถึงได้ ตัวอย่างเช่น: ใช้ชื่อ GetSomething เพื่อตั้งชื่อฟังก์ชันที่ส่งคืนค่าฟิลด์/ฟิลด์ภายใน และใช้ SetSomething เพื่อตั้งชื่อขั้นตอนที่ตั้งค่าฟิลด์/ฟิลด์
อย่าใช้อักษรตัวพิมพ์ใหญ่ทั้งหมดในส่วน const เว้นแต่จำเป็นสำหรับการแปลไฟล์ส่วนหัว
Delphi ได้รับการพัฒนาในแคลิฟอร์เนีย ดังนั้นเราจึงไม่สนับสนุนการใช้โทเค็น เว้นแต่จำเป็นสำหรับการแปลไฟล์ส่วนหัว
ถูกต้อง:
FMyString: สตริง;
ไม่ถูกต้อง:
lpstrMyString: สตริง;
แน่นอนว่าระบบการตั้งชื่อภาษาฮังการียังคงอยู่ในคำจำกัดความประเภทการแจงนับ:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,
bkYes, bkNo, bkClose, bkAbort, bkRetry,
bkignore, bkAll);
ในกรณีนี้ อักขระ bk จะถูกแทรกก่อนแต่ละองค์ประกอบของประเภทการแจงนับนี้ bk หมายถึง ButtonKind
เมื่อพิจารณาหลักการตั้งชื่อ ให้หลีกเลี่ยงการใช้ชื่อที่มีอักขระตัวเดียว ยกเว้นตัวแปรเวลาเป็นศูนย์และตัวแปรลูป
หลีกเลี่ยงการใช้ตัวแปร "l" (L) เนื่องจากเป็นการยากที่จะแยกแยะความแตกต่างจาก "1" (หนึ่ง) บนเครื่องพิมพ์หรือจอภาพ
3.4 การตั้งชื่อวิธี
การตั้งชื่อเมธอดยังใช้รูปแบบ CamelCase แบบแผนการตั้งชื่อเมธอดเหมือนกับการตั้งชื่อฟิลด์ที่ไม่ใช่ const แต่สามารถแยกแยะได้จากบริบท การตั้งชื่อเมธอดควรบังคับใช้กริยาหรือวลีกริยา ตัวอย่างเช่น:
//การตั้งชื่อเมธอดที่ดี:
ShowStatus, DrawCircle, AddLayoutComponent
//การตั้งชื่อวิธีไม่ดี:
MouseButton //นามวลี ไม่มีฟังก์ชันคำอธิบาย
DrawCircle //เริ่มต้นด้วยอักษรตัวพิมพ์เล็ก
add_layout_component //ใช้ขีดเส้นใต้
//ฟังก์ชั่นของวิธีการต่อไปนี้ยังไม่ชัดเจนเพียงพอ มันเริ่มเรียกใช้บริการ (ดีกว่า: StartServer) หรือกำหนดว่าบริการกำลังทำงานอยู่หรือไม่ (ดีกว่า: IsServerRunning)
ServerRunning // วลีกริยา แต่ไม่ใช่คำสั่ง
วิธีการรับหรือตั้งค่าคุณสมบัติคลาสบางอย่างควรเรียกว่า GetProperty หรือ SetProperty ตามลำดับ โดยที่ Property แสดงถึงชื่อของคุณสมบัติ ตัวอย่างเช่น:
รับความสูง, ตั้งค่าความสูง
วิธีการทดสอบคุณสมบัติบูลีนของคลาสควรมีชื่อว่า IsVisible โดยที่ Visible แสดงถึงชื่อของคุณสมบัติ ตัวอย่างเช่น:
ปรับขนาดได้, มองเห็นได้
3.5 การตั้งชื่อตัวแปรท้องถิ่น
กฎการตั้งชื่อสำหรับตัวแปรภายในจะเหมือนกับกฎสำหรับฟิลด์/ฟิลด์ ยกเว้นว่าจะไม่ได้ใช้ "F" ดูหัวข้อ 3.3
3.6 คำสงวน
คำและตัวบ่งชี้ที่สงวนไว้ควรเป็นตัวพิมพ์เล็กทั้งหมด สิ่งนี้อาจทำให้สับสนเล็กน้อยในบางครั้ง ตัวอย่างเช่น: จำนวนเต็มคือตัวระบุและปรากฏด้วยตัวอักษรตัวแรกที่เป็นตัวพิมพ์ใหญ่ คำสงวนของสตริงเป็นตัวพิมพ์เล็กทั้งหมด
3.7 การประกาศประเภท
การประกาศชื่อประเภททั้งหมดจะขึ้นต้นด้วยตัวอักษร T และเป็นไปตามชื่อเดียวกันกับชั้นเรียน
4.0 การใช้พื้นที่สีขาว
4.1 บรรทัดว่าง
บรรทัดว่างสามารถปรับปรุงความสามารถในการอ่านโดยการจัดกลุ่มส่วนของโค้ดที่เกี่ยวข้องเชิงตรรกะ บรรทัดว่างยังสามารถใช้ได้ในตำแหน่งต่อไปนี้:
หลังบล็อกความคิดเห็นเกี่ยวกับลิขสิทธิ์ การประกาศบรรจุภัณฑ์ (แพ็คเกจ) และส่วนการนำเข้า (นำเข้า)
ระหว่างการประกาศชั้นเรียน
ระหว่างการประกาศวิธีการ
4.2 ช่องว่าง
Object Pascal เป็นภาษาที่ชัดเจนและอ่านง่าย โดยปกติแล้ว คุณไม่จำเป็นต้องเว้นวรรคจำนวนมากเพื่อแยกบรรทัดในโค้ดของคุณ บทความต่อไปนี้ให้คำแนะนำบางประการสำหรับการใช้ช่องว่าง:
4.2.2 ไม่ควรใช้ช่องว่าง:
ระหว่างชื่อวิธีการและวงเล็บเปิด
ก่อนหรือหลังตัวดำเนินการ .(dot)
ระหว่างตัวดำเนินการเอกภาคและตัวถูกดำเนินการ
ระหว่างประเภทและนิพจน์ที่ใช้
หลังวงเล็บเหลี่ยมซ้ายและก่อนวงเล็บเหลี่ยมขวา
หลังวงเล็บเหลี่ยมด้านซ้ายและก่อนวงเล็บเหลี่ยมด้านขวา
ก่อนการห้าม;
ตัวอย่างเช่น:
//การใช้งานที่ถูกต้อง:
ฟังก์ชั่น TMyClass.MyFunc (ค่า var: จำนวนเต็ม);
MyPointer := @MyRecord;
MyClass := TMyClass(MyPointer);
MyInteger := MyIntegerArray[5];
//การใช้งานไม่ถูกต้อง:
ฟังก์ชั่น TMyClass.MyFunc( var Value: Integer );
MyPointer := @MyRecord;
MyClass := TMyClass ( MyPointer ) ;
MyInteger := MyIntegerArray [ 5 ] ;
4.3 การเยื้อง
คุณควรเยื้องระดับการเยื้องทั้งหมดด้วยช่องว่างสองช่องเสมอ กล่าวอีกนัยหนึ่ง ระดับแรกเยื้องด้วยช่องว่างสองช่อง ระดับที่สองเยื้องด้วยช่องว่างสี่ช่อง ระดับที่สามเยื้องด้วยช่องว่างหกช่อง... อย่าใช้อักขระแท็บ Tab
แน่นอนว่ายังมีข้อยกเว้นบางประการอยู่ คำสงวน เช่น หน่วย การใช้งาน ประเภท ส่วนต่อประสาน การนำไปใช้ การเริ่มต้น และการสรุป จะใช้ตัวพิมพ์ใหญ่เสมอ ตัวระบุส่วนท้ายสุดของเซลล์จะเป็นระดับบนสุดเช่นกัน ในไฟล์โปรเจ็กต์ โปรแกรมและจุดเริ่มต้นและจุดสิ้นสุดหลักจะอยู่ในตารางด้านบนด้วย บล็อก start..end หลักจะต้องมีการเยื้องอย่างน้อยสองช่องว่าง
4.4 ความต่อเนื่อง
แถวควรจำกัดไว้ที่ 80 คอลัมน์ แถวที่มีมากกว่า 80 คอลัมน์ควรแบ่งออกเป็นหลายแถวติดต่อกัน บรรทัดต่อๆ ไปทั้งหมดควรต่อจากบรรทัดแรกของการประกาศนี้ และเว้นวรรคด้วยอักขระสองตัว
ตัวอย่างเช่น:
//ถูกต้อง:
ฟังก์ชั่น CreateWindowEx (dwExStyle: DWord;
lpClassName: PChar; lpWindowName: PChar;
dwStyle: DWORD; X, Y, nWidth, nHeight: จำนวนเต็ม;
hWndParent: HWND; hMenu: HMENU;
lpParam: ตัว ชี้ ): HWND;
ถ้า ((X = Y) หรือ (Y = X) หรือ
(Z = P) หรือ (F = J) แล้ว
เริ่ม
ส := เจ;
จบ ;
อย่าตัดบรรทัดระหว่างพารามิเตอร์และประเภทของพารามิเตอร์ เว้นแต่ว่ารายการจะถูกคั่นด้วยเครื่องหมายจุลภาค ซึ่งในกรณีนี้ ให้ตัดก่อนพารามิเตอร์สุดท้าย เพื่อให้ชื่อประเภทเริ่มต้นในบรรทัดถัดไป ไม่ควรมีช่องว่างระหว่างเครื่องหมายทวิภาคและตัวแปร และควรมีช่องว่างระหว่างเครื่องหมายทวิภาคและชื่อประเภท
//ถูกต้อง:
ขั้นตอน Foo (Param1: Integer; Param2: Integer);
//ความผิดพลาด:
ขั้นตอน Foo( Param :Integer; Param2:Integer);
บรรทัดถัดไปไม่ควรขึ้นต้นด้วยตัวดำเนินการไบนารี หลีกเลี่ยงการตัดบรรทัดซึ่งปกติแล้วจะไม่เกิดช่องว่าง เช่น ระหว่างชื่อเมธอดและวงเล็บเปิด หรือระหว่างชื่ออาร์เรย์กับวงเล็บเปิด หากคุณต้องขึ้นบรรทัดในสถานการณ์ข้างต้น ให้แยกบรรทัดหลังวงเล็บเปิดหรือวงเล็บเหลี่ยมเปิด อย่าใส่ start ในบรรทัดเดียวกันกับโค้ดอื่น
ตัวอย่างเช่น:
//ความผิดพลาด:
ในขณะที่ (LongExpression1 หรือ LongExpression2) เริ่ม ต้นขึ้น
//ทำอะไรสักอย่าง
//ทำอะไรอย่างอื่น;
จบ ;
//ถูกต้อง
ในขณะที่ (LongExpression1 หรือ longExpression2) ทำ
เริ่ม
//ทำอะไรสักอย่าง
//ทำอะไรอย่างอื่น;
จบ ;
ถ้า (LongExpressiong1) หรือ
(LongExpression2) หรือ
(LongExpression3) แล้ว
5.0 ความคิดเห็น
ภาษา Object Pascal รองรับความคิดเห็นสองประเภท: บล็อกและความคิดเห็นบรรทัดเดียว ต่อไปนี้เป็นหลักเกณฑ์การใช้คำอธิบายประกอบ:
·การแสดงความคิดเห็นที่ด้านบนของหน่วยการเรียนรู้จะเป็นประโยชน์เพื่ออธิบายวัตถุประสงค์ของหน่วยการเรียนรู้
·การแสดงความคิดเห็นก่อนการประกาศชั้นเรียนจะเป็นประโยชน์
·การตั้งค่าคำอธิบายประกอบก่อนการประกาศเมธอดจะเป็นประโยชน์
·หลีกเลี่ยงความคิดเห็นที่มีความหมายที่ชัดเจน
i := i + 1; // เพิ่มอันหนึ่งไปที่ i
·โปรดจำไว้ว่าความคิดเห็นที่ตีความผิดได้ง่ายนั้นเป็นอันตรายมากกว่าการไม่แสดงความคิดเห็นเลย
·หลีกเลี่ยงการใส่ข้อมูลในความคิดเห็นที่ดูเหมือนว่าไม่ถูกต้อง
·หลีกเลี่ยงการฝังเครื่องหมายดอกจันหรือสัญลักษณ์การพิมพ์อื่นๆ ที่ขอบความคิดเห็น
·ความคิดเห็นแบบ Zero-hour นั่นคือความคิดเห็นที่ต้องเปลี่ยนแปลงหรือลบ ควรมีเครื่องหมาย "???:" นำหน้า เพื่อให้ง่ายต่อการค้นหา ตามหลักการแล้ว ความคิดเห็นแบบ Zero-time ทั้งหมดควรถูกลบก่อนที่โปรแกรมจะถูกเผยแพร่
// ???: เปลี่ยนสิ่งนี้เป็นเรียก Sort เมื่อได้รับการแก้ไขแล้ว
รายการ MySort;
5.1 บล็อกความคิดเห็น
Object Pascal รองรับความคิดเห็นแบบบล็อกสองประเภท ความคิดเห็นที่ใช้กันมากที่สุดคือเครื่องหมายวงเล็บปีกกา {} ทีมงาน Delphi เก็บความคิดเห็นให้น้อยที่สุดและเรียบง่ายที่สุดเท่าที่จะเป็นไปได้ ตัวอย่างเช่น: คุณควรหลีกเลี่ยงการใช้เครื่องหมายดอกจันเพื่อสร้างรูปแบบหรือบรรทัดในความคิดเห็นของคุณ ให้ใช้ช่องว่างเพื่อแยกความคิดเห็นของคุณแทน เช่นเดียวกับที่คุณทำในเอกสารประมวลผลคำ คำในความคิดเห็นของคุณควรเริ่มต้นในบรรทัดเดียวกับวงเล็บปีกกาอันแรก ดังที่ตัดตอนมาจาก DsgnIntf.pas ต่อไปนี้:
{ TPropertyEditor
แก้ไขคุณสมบัติของส่วนประกอบหรือรายการส่วนประกอบ
เลือกเข้าใน Object Inspector
เครื่องมือแก้ไขถูกสร้างขึ้นตามประเภทของ
ทรัพย์สินที่ได้รับการแก้ไขตามที่กำหนดโดยประเภท
ลงทะเบียนโดย...
ฯลฯ...
รับXxxValue
รับค่าของคุณสมบัติแรกใน
ทรัพย์สินเรียกตามความเหมาะสม
วิธีการ TProperty GetXxxValue เพื่อดึงข้อมูลไฟล์
ค่า.
SetXxxValue ตั้งค่าของคุณสมบัติทั้งหมด
ในคุณสมบัติคุณสมบัติการโทรที่เหมาะสม
วิธีการ TProperty SetXxxxValue เพื่อตั้งค่า }
ความคิดเห็นที่บล็อกมักใช้ในความคิดเห็นเกี่ยวกับลิขสิทธิ์ ยังใช้เพื่อแสดงความคิดเห็นในโค้ดบางบรรทัด
ความคิดเห็นแบบบล็อกที่อธิบายวัตถุประสงค์ของวิธีการควรนำหน้าด้วยการประกาศวิธีการ
ตัวอย่างเช่น:
// ถูกต้อง
{ TMyObject.MyMethod
รูทีนนี้อนุญาตให้คุณรันโค้ด }
ขั้นตอน TMyObject.MyMethod;
เริ่ม
จบ;
// ไม่ถูกต้อง
ขั้นตอน TMyObject.MyMethod;
{************************************************ * ****
TMyObject.MyMethod
รูทีนนี้ช่วยให้คุณสามารถรันโค้ดได้
************************************************** * *****}
เริ่ม
จบ;
ความคิดเห็นแบบบล็อกประเภทที่สองประกอบด้วยอักขระสองตัว วงเล็บ และเครื่องหมายดอกจัน: (* *) บางครั้งเรียกว่าความคิดเห็นแบบวงเล็บดาว โดยทั่วไปคำอธิบายประกอบเหล่านี้จะมีประโยชน์ในระหว่างการพัฒนาโค้ดเท่านั้น และประโยชน์หลักคืออนุญาตให้คำอธิบายประกอบแบบซ้อนมีความลึกน้อยกว่าสองระดับ Object Pascal ไม่สนับสนุนการซ้อนความคิดเห็นประเภทเดียวกัน ดังนั้นจึงมีการซ้อนเพียงระดับเดียวเท่านั้น: เครื่องหมายปีกกาในเครื่องหมายปีกการูปดาว หรือเครื่องหมายปีกการูปดาวในเครื่องหมายปีกกา คำอธิบายประกอบ Pascal มาตรฐานประเภทอื่นๆ ภายในคำอธิบายประกอบประเภทนี้จะถูกละเว้นตราบใดที่คุณไม่ซ้อนกัน ดังนั้น คุณสามารถใช้ไวยากรณ์นี้เพื่อใส่ความคิดเห็นในบล็อกโค้ดขนาดใหญ่ที่มีทั้งโค้ดและความคิดเห็น:
(* ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
ทำเช่นนี้; // เริ่มกระบวนการ
ทำอย่างนั้น; // ทำซ้ำต่อไป
{ เราต้องการวิธีรายงานข้อผิดพลาดที่นี่ บางทีอาจใช้
ลองบล็อกในที่สุด ??? }
CallMoreCode; // จบกระบวนการ
จบ ; *)
ในกรณีนี้ วิธีการ Button1Click ทั้งหมดจะถูกใส่เครื่องหมายความคิดเห็น รวมถึงความคิดเห็นย่อยใดๆ ที่อยู่ภายในด้วย
5.2 ความคิดเห็นบรรทัดเดียว
ความคิดเห็นบรรทัดเดียวประกอบด้วยอักขระความคิดเห็น // และข้อความนำ โดยมีช่องว่างระหว่างข้อความและอักขระความคิดเห็น หากความคิดเห็นบรรทัดเดียวอยู่ในบรรทัดที่แตกต่างจากโค้ด จะต้องมีระดับการเยื้องเดียวกันกับโค้ด คุณสามารถใช้ความคิดเห็นบรรทัดเดียวหลายรายการเพื่อสร้างความคิดเห็นขนาดใหญ่ได้
จำเป็นต้องมีบรรทัดว่างก่อนความคิดเห็นบรรทัดเดียวหรือกลุ่มความคิดเห็น เว้นแต่จะเป็นบรรทัดแรกของบล็อก หากใช้ความคิดเห็นกับข้อความหลายรายการ ความคิดเห็นและกลุ่มความคิดเห็นควรตามด้วยบรรทัดว่าง หากความคิดเห็นอธิบายเฉพาะข้อความในบรรทัดที่ตามมา ไม่จำเป็นต้องเติมบรรทัดว่างตามหลัง
ตัวอย่างเช่น:
// เปิดฐานข้อมูล
ตารางที่ 1. เปิด;
ความคิดเห็นบรรทัดเดียวยังสามารถติดตามการประกาศโค้ดที่อธิบายได้ ความคิดเห็นดังกล่าวบางครั้งเรียกว่าการติดตามความคิดเห็น ต้องมีช่องว่างระหว่างพวกเขากับโค้ดอย่างน้อยหนึ่งช่อง หากความคิดเห็นการติดตามหลายรายการปรากฏขึ้นพร้อมกันในบล็อกของโค้ด ความคิดเห็นเหล่านี้จะต้องสอดคล้องกัน
ตัวอย่างเช่น:
ถ้า ( ไม่ใช่ IsVisible) แล้ว
ออก; // ไม่มีอะไรทำ
Inc(StrLength); // สำรองพื้นที่สำหรับตัวยุติค่า null
หลีกเลี่ยงการติดตามความคิดเห็นในโค้ดที่ปฏิบัติการได้แต่ละบรรทัด โดยปกติวิธีที่ดีที่สุดคือจำกัดการใช้ความคิดเห็น หรือแม้แต่ปล่อยว่างไว้ระหว่างบล็อก beginning..end ของเมธอดหรือฟังก์ชัน ความคิดเห็นแบบยาวอาจปรากฏในความคิดเห็นแบบบล็อกก่อนคำจำกัดความของวิธีการและฟังก์ชัน
ใจดี
6.1 การจัดชั้นเรียน
การจัดโครงสร้างชั้นเรียนควรเป็นไปตามลำดับต่อไปนี้:
·การประกาศโดเมน/ฟิลด์
·การประกาศวิธีการ
·นิยามแอตทริบิวต์
โดเมน/ฟิลด์ คุณสมบัติ และวิธีการควรจัดทำดัชนีตามตัวอักษรตามชื่อ
6.1.1 ระดับการเข้าถึง
ยกเว้นโค้ดที่สร้างโดย IDE ตัวกำหนดขอบเขตสำหรับคลาสควรอยู่ในลำดับต่อไปนี้:
·คำแถลงส่วนตัว
·ปกป้องคำสั่ง
· คำแถลงต่อสาธารณะ
·คำสั่งที่เผยแพร่
ใน Object Pascal สมาชิกคลาสมีระดับการเข้าถึงสี่ระดับ: เผยแพร่ สาธารณะ ป้องกัน และส่วนตัว ตามลำดับการลดความสามารถในการเข้าถึง ระดับการเข้าถึงเริ่มต้นถูกเผยแพร่แล้ว โดยทั่วไป สมาชิกควรได้รับมอบหมายระดับการเข้าถึงต่ำสุดที่เหมาะสมที่สุด ตัวอย่างเช่น: สมาชิกที่สามารถเข้าถึงได้โดยคลาสอื่นในหน่วยเดียวกันเท่านั้นควรได้รับการประกาศให้เป็นส่วนตัว ในเวลาเดียวกัน การประกาศสมาชิกที่มีระดับการเข้าถึงต่ำยังทำให้คอมไพลเลอร์มีโอกาสปรับปรุงการปรับให้เหมาะสมอีกด้วย ในทางกลับกัน การใช้ระดับการเข้าถึงต่ำทำให้การขยายคลาสย่อยทำได้ยาก หากมีเหตุผลที่เชื่อได้ว่าคลาสหนึ่งจะถูกจัดคลาสย่อยในอนาคต สมาชิกเหล่านั้นที่จำเป็นต้องได้รับการสืบทอดและขยายโดยคลาสย่อยควรได้รับการประกาศให้เป็นคุณสมบัติที่ได้รับการป้องกันเช่นกัน
คุณควรห้ามไม่ให้สาธารณะเข้าถึงข้อมูล โดยทั่วไปข้อมูลจะถูกประกาศในส่วนส่วนตัว และการเข้าถึงแบบสาธารณะใด ๆ ควรกระทำผ่านวิธี GetXXX, SetXXX หรือคุณสมบัติ
6.1.8 ประกาศคอนสตรัคเตอร์
วิธีการจะต้องเรียงลำดับตามดัชนีตัวอักษร เป็นการถูกต้องที่จะวางตัวสร้างและตัวทำลายไว้ที่จุดเริ่มต้นของส่วนสาธารณะหรือจัดเรียงตามตัวอักษร
หากมีตัวสร้างหลายตัวหรือคุณใช้ตัวสร้างหลายตัวที่มีชื่อเดียวกัน ควรจัดเรียงตัวเหล่านั้นตามรายการพารามิเตอร์ โดยตัวที่มีพารามิเตอร์น้อยที่สุดอยู่ข้างหน้าตัวที่มีพารามิเตอร์มากที่สุด ซึ่งหมายความว่าหากมี Constructor ที่ไม่มีพารามิเตอร์ จะต้องปรากฏก่อน เพื่อรักษาความเข้ากันได้ที่ดีที่สุดกับ C++ Builder รายการพารามิเตอร์ของตัวสร้างควรไม่ซ้ำกัน C++ ไม่ได้เรียก Constructor ตามชื่อของมัน ดังนั้นวิธีเดียวที่จะแยกแยะ Constructor หลายตัวได้ก็คือผ่านรายการอาร์กิวเมนต์ของมัน
6.2 การประกาศวิธีการ
หากเป็นไปได้ การประกาศวิธีการควรปรากฏในบรรทัดเดียว
ตัวอย่างเช่น:
ตัวอย่าง:
ขั้นตอน ImageUpdate (รูปภาพ img, infoflags: จำนวนเต็ม,
x: จำนวนเต็ม, y: จำนวนเต็ม, w: จำนวนเต็ม, h: จำนวนเต็ม)
อินเทอร์เฟซ 7.0
การประกาศอินเทอร์เฟซมีรูปแบบเดียวกับการประกาศคลาส:
InterfaceName = อินเตอร์เฟส ([ อินเตอร์เฟส ที่สืบทอดมา ])
ส่วนต่อประสานร่างกาย
จบ ;
การประกาศอินเทอร์เฟซควรเยื้องด้วยช่องว่าง 2 ช่อง ส่วนเนื้อหาอินเทอร์เฟซมี 4 ช่องว่าง และอักขระท้ายด้วย 2 ช่องว่าง
ไม่มีฟิลด์/ฟิลด์ในการประกาศอินเทอร์เฟซ แต่คุณสมบัติสามารถปรากฏได้
วิธีการอินเทอร์เฟซทั้งหมดเป็นแบบสาธารณะและเป็นนามธรรม และไม่จำเป็นต้องรวมคำหลักดังกล่าวในการประกาศอินเทอร์เฟซ
การประกาศอินเทอร์เฟซจะมีลักษณะเหมือนกับการประกาศประเภทเดียวกัน เว้นแต่จะระบุไว้เป็นอย่างอื่น
7.1 การจัดโครงสร้างส่วนต่อประสาน
เนื้อหาของอินเทอร์เฟซสามารถจัดเรียงได้ตามลำดับต่อไปนี้:
·การประกาศวิธีการอินเทอร์เฟซ
·การประกาศคุณลักษณะอินเทอร์เฟซ
วิธีการและคุณสมบัติอินเทอร์เฟซได้รับการประกาศในลักษณะเดียวกับคลาส
คำชี้แจง 8.0
Statement คือบรรทัดหรือบรรทัดของโค้ดที่ลงท้ายด้วยตราประทับ คำสั่งเดียวมีหมายเลขการแบนเพียงหมายเลขเดียว และคำสั่งผสมมีชื่อการแบนหลายชื่อ
//นี่เป็นคำสั่งเดียว:
ก := ข;
//นี่คือคำสั่งผสม:
เริ่ม
ข := ค;
ก := ข;
จบ ;
8.0.1 การประกาศครั้งเดียว
หากจำเป็นต้องรวมคำสั่งเดียว จะต้องเยื้องสองช่องว่างโดยสัมพันธ์กับบรรทัดก่อนหน้า
//ตัวอย่างเช่น:
ค่าของฉัน :=
MyValue + (SomeVeryLongStatement / OtherLongStatement);
8.1.1 การประกาศมอบหมายและการแสดงออก
สามารถมีได้มากที่สุดหนึ่งคำสั่งต่อบรรทัด
ตัวอย่างเช่น:
a := b + c; Inc ( นับ );
ก := b + c; //ถูกต้อง
Inc(นับ); //ถูกต้อง
8.1.2 การประกาศตัวแปรโลคอล
ตัวแปรในเครื่องยังใช้รูปแบบ CamelCase อย่าใช้ผู้นำ "F" ซึ่งสงวนไว้สำหรับฟิลด์/ฟิลด์ในการประกาศคลาส
ตัวอย่างเช่น:
var
MyData: จำนวนเต็ม;
MyString: สตริง ;
คุณสามารถประกาศตัวแปรประเภทเดียวกันได้หลายรายการในบรรทัดเดียวกัน:
var
ArraySize, ArrayCount: จำนวนเต็ม;
ไม่แนะนำให้ใช้พฤติกรรมการประกาศนี้ในการประกาศชั้นเรียน
8.1.3 การประกาศอาร์เรย์
เป็นเรื่องปกติที่จะเว้นวรรคก่อนวงเล็บเปิดและหลังวงเล็บปิดเสมอ:
พิมพ์
TMyArray = อาร์เรย์ [0..100] ของ Char;
8.2.3 ถ้าคำสั่ง
คำสั่ง if จะต้องปรากฏในสองบรรทัดเป็นอย่างน้อย:
ตัวอย่างเช่น:
//ความผิดพลาด:
ถ้า A = B ก็ ทำอะไรสักอย่าง;
//ถูกต้อง
ถ้า A = B แล้ว
ทำอะไรสักอย่าง;
หากเป็นคำสั่งผสม if ควรมีบรรทัดใหม่สำหรับแต่ละตัวคั่น:
//ความผิดพลาด:
ถ้า A = B ให้ เริ่ม เลย
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
สิ้นสุด อย่างอื่น เริ่มต้น
ทำเช่นนี้;
ทำอย่างนั้น;
จบ ;
//ถูกต้อง
ถ้า A = B แล้ว
เริ่ม
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
จบ
อื่น
เริ่ม
ทำเช่นนี้;
ทำอย่างนั้น;
จบ ;
คุณสามารถใช้รูปแบบต่อไปนี้ได้บางส่วน:
//ถูกต้อง
ถ้า เงื่อนไข แล้ว
เริ่ม
ทำเช่นนี้;
จบ อย่างอื่น
เริ่ม
ทำอย่างนั้น;
จบ ;
//ถูกต้อง
ถ้า เงื่อนไข แล้ว
เริ่ม
ทำเช่นนี้;
จบ
อื่น
ทำอะไรสักอย่าง;
//ถูกต้อง
ถ้า เงื่อนไข แล้ว
เริ่ม
ทำเช่นนี้;
จบ อย่างอื่น
ทำอะไรสักอย่าง;
//วิธีการต่อไปนี้อาจไม่ได้รับการดูแล แต่ก็สมควรได้รับการยกย่อง:
ถ้า เงื่อนไข แล้ว
ทำแบบนี้
อย่างอื่น ทำแบบนั้น;
8.2.4 สำหรับคำแถลง
ตัวอย่าง:
// ไม่ถูกต้อง
สำหรับ ฉัน := 0 ถึง 10 จะ เริ่มต้น
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
จบ ;
// ถูกต้อง
สำหรับ ฉัน := 0 ถึง 10 ทำ
เริ่ม
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
จบ ;
8.2.5 ขณะคำสั่ง
ตัวอย่าง:
// ไม่ถูกต้อง
ในขณะที่ x < j จะ เริ่มต้น
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
จบ ;
// ถูกต้อง
ในขณะที่ x < j ทำ
เริ่ม
ทำอะไรสักอย่าง;
ทำอะไรอย่างอื่น;
จบ ;
8.2.6 ทำซ้ำจนกระทั่งคำสั่ง
ตัวอย่าง:
// ถูกต้อง
ทำซ้ำ
x := เจ;
เจ := อัปเดตค่า;
จนถึง เจ = 25;
8.2.7 คำชี้แจงกรณี
ตัวอย่าง:
// ถูกต้อง
กรณี การควบคุมการจัดตำแหน่ง ของ
alLeft, alNone: NewRange := Max(NewRange, ตำแหน่ง);
alRight: Inc(AlignMargin, Control.Width);
จบ ;
// ถูกต้อง
กรณี x ของ
CSSเริ่มต้น:
เริ่ม
เจ := อัปเดตค่า;
จบ ;
csBegin: x := j;
csTimeOut:
เริ่ม
เจ := x;
x := อัปเดตค่า;
จบ ;
จบ ;
// ถูกต้อง
กรณี ScrollCode ของ
SB_LINEUP, SB_LINEDOWN:
เริ่ม
จำนวน := FIncreation div FLineDiv;
FinalIncr := FIncreation mod FLineDiv;
นับ := FLineDiv;
จบ ;
SB_PAGEUP, SB_PAGEDOWN:
เริ่ม
จำนวน := FPageIncreation;
FinalIncr := เพิ่ม mod FPageDiv;
จำนวน := จำนวน div FPageDiv;
นับ := FPageDiv;
จบ ;
อื่น
นับ := 0;
รวม := 0;
สุดท้ายIncr := 0;
จบ ;
8.2.8 ลองคำสั่ง
//ถูกต้อง
พยายาม
พยายาม
EnumThreadWindows(CurrentThreadID, @Disable, 0);
ผลลัพธ์ := TaskWindowList;
ยกเว้น
EnableTaskWindows(รายการหน้าต่างงาน);
ยก ;
จบ ;
ในที่สุด
TaskWindowList := SaveWindowList;
TaskActiveWindow := SaveActiveWindow;
จบ ;
บล็อกของผู้เขียน: http://blog.csdn.net/sailerbai/