1. บทนำเกี่ยวกับข้อกำหนด
ข้อกำหนดนี้ส่วนใหญ่กำหนดกฎและข้อควรระวังที่โปรแกรม Delphi Source ควรปฏิบัติตามในระหว่างกระบวนการเขียน วัตถุประสงค์ของการเขียนข้อกำหนดนี้คือการรักษาพฤติกรรมการเขียนซอร์สโค้ดของนักพัฒนาซอฟต์แวร์ของ บริษัท ให้สอดคล้องกัน การทำเช่นนั้นสมาชิกแต่ละกลุ่มสามารถเข้าใจรหัสของสมาชิกกลุ่มอื่น ๆ เพื่ออำนวยความสะดวกในการพัฒนาระบบการบำรุงรักษาระบบหน่วยความจำซอร์สโค้ด
2. ข้อมูลจำเพาะรูปแบบทั่วไป
2.1 การเยื้อง
การเยื้องเป็นช่องว่างสองช่องที่เพิ่มขึ้นเพื่อเพิ่มความสามารถในการอ่านเมื่อระดับของโปรแกรมการเปลี่ยนแปลง กฎของการเยื้องคือการเยื้องสองช่องว่างสำหรับแต่ละระดับ ไม่อนุญาตให้แท็บ เนื่องจาก TAB จะสร้างเอฟเฟกต์ที่แตกต่างกันเนื่องจากการตั้งค่าที่แตกต่างกันของผู้ใช้ เมื่อคุณพบว่าเริ่มต้นหรือเข้าสู่การตัดสินลูปการจัดการข้อยกเว้นด้วยคำแถลงการประกาศประเภทบันทึกการประกาศชั้นเรียน ฯลฯ เพิ่มระดับหนึ่ง การประกาศในชั้นเรียน ฯลฯ จะลดลงหนึ่งระดับ ตัวอย่างเช่น:
iftmpint <> 100 จากนั้น
tmpint: = 100;
2.2begin..end
คำสั่งเริ่มต้นและคำสั่งสุดท้ายควรใช้บรรทัดเดียวในโปรแกรมต้นทางเช่น:
fori: = 0to10dobegin // การใช้งานที่ไม่ถูกต้อง
จบ;
fori: = 0to10do // การใช้งานที่ถูกต้อง
เริ่ม
จบ;
2.3 ช่องว่าง
เพิ่มช่องว่างที่ปลายทั้งสองของตัวดำเนินการและสัญลักษณ์การตัดสินเชิงตรรกะเช่น: i: = i+1;, aandb ฯลฯ แต่ไม่จำเป็นต้องมีช่องว่างเมื่อเพิ่มวงเล็บ ตัวอย่างเช่น: ถ้า (a> b) จากนั้น // การใช้งานที่ไม่ถูกต้อง
ถ้า (a> b) แล้ว // แก้ไขการใช้งาน
ตัวอย่างเช่น: procedureTest (param1: จำนวนเต็ม; param3: string);
3. ข้อมูลจำเพาะรูปแบบการเขียนไวยากรณ์ของ ObjectPascal
3.1 คำที่สงวนไว้
ควรใช้คำหรือคำหลักที่สงวนไว้ทั้งหมดใน ObjectPascal ในตัวอักษรตัวพิมพ์เล็ก
3.2 กระบวนการและฟังก์ชั่น
3.2.1 การตั้งชื่อและรูปแบบ
ชื่อของขั้นตอนและฟังก์ชั่นควรประกอบด้วยคำที่มีความหมายและตัวอักษรตัวแรกของคำทั้งหมดควรอยู่ในตัวอักษรตัวใหญ่ ตัวอย่างเช่น:
PromerureFormatardDisk; // การตั้งชื่อที่ไม่ถูกต้อง
PromerureFormathardDisk; // การตั้งชื่อที่ถูกต้อง
กระบวนการและฟังก์ชั่นที่ตั้งค่าเนื้อหาของตัวแปรควรใช้ชุดเป็นคำนำหน้าตัวอย่างเช่น:
ProcedureSeTusername;
กระบวนการและฟังก์ชั่นที่อ่านเนื้อหาตัวแปรควรใช้เป็นคำนำหน้าตัวอย่างเช่น:
functiongetUserName: String;
3.2.2 พารามิเตอร์ของขั้นตอนและฟังก์ชั่น
3.2.2.1 การตั้งชื่อ
พารามิเตอร์ของประเภท Unified ถูกเขียนในประโยคเดียวกัน:
PromeRefoo (param1, param2, param3: จำนวนเต็ม; param4: string);
3.2.2.2 การตั้งชื่อ
พารามิเตอร์ทั้งหมดจะต้องมีความหมาย
ProcedureSomeProc (AUSERNAME: String; AUSERAGE: Integer);
3.2.2.3 การตั้งชื่อความขัดแย้ง
เมื่อทั้งสองหน่วยที่ใช้รวมถึงฟังก์ชั่นหรือขั้นตอนที่ซ้ำกันเมื่อคุณอ้างถึงฟังก์ชั่นหรือขั้นตอนนี้ฟังก์ชั่นหรือขั้นตอนในหน่วยที่ประกาศไว้ในประโยคการใช้งานจะถูกดำเนินการ เพื่อหลีกเลี่ยง 'การใช้งานขึ้นอยู่กับการใช้ข้อ' จำเป็นต้องเขียนฟังก์ชั่นที่สมบูรณ์หรือแหล่งที่มาของกระบวนการเมื่ออ้างถึงฟังก์ชั่นหรือกระบวนการ ตัวอย่างเช่น:
sysutils.findclose (SR);
windows.findclose (จับ);
3.3 ตัวแปร
3.3.1 การตั้งชื่อตัวแปรและรูปแบบ
ก่อนอื่นตัวแปรจะต้องได้รับชื่อที่มีความหมายเพื่อให้สมาชิกกลุ่มคนอื่น ๆ สามารถเข้าใจความหมายที่แสดงโดยตัวแปรได้อย่างง่ายดาย เมืองหลวง. ตัวอย่างเช่น:
วาจา
WriteFormat :: String;
ในเวลาเดียวกันสำหรับบางประเภทตัวย่อบางอย่างสามารถใช้ดังนี้:
ประเภทตัวชี้
P
ประเภทบันทึก
เครื่องปูน
ประเภทอาร์เรย์
arr
ใจดี
ระดับ
ตัวแปรควบคุมลูปมักจะใช้อักขระตัวเดียวเช่น: i, j หรือ k นอกจากนี้ยังอนุญาตให้ใช้ชื่อที่มีความหมายเช่น UserIndex
3.3.2 ตัวแปรท้องถิ่น
การใช้ตัวแปรท้องถิ่นในกระบวนการเป็นไปตามกฎการตั้งชื่อสำหรับตัวแปรอื่น ๆ ทั้งหมด
3.3.3 ตัวแปรทั่วโลก
พยายามอย่าใช้ตัวแปรทั่วโลก ตัวอย่างเช่น:
gprecuserCount: point; // ตัวแปรส่วนกลางที่มีชื่อ userCount ประเภทของมันคือตัวชี้ไปยังโครงสร้าง
แต่ตัวแปรทั่วโลกสามารถใช้ภายในโมดูล ตัวแปรทั่วโลกทั้งหมดในโมดูลจะต้องนำหน้าด้วย 'F' หากจำเป็นต้องมีการแลกเปลี่ยนข้อมูลระหว่างหลายโมดูลจะต้องดำเนินการโดยการประกาศแอตทริบิวต์ ตัวอย่างเช่น:
พิมพ์
tformoverdraftreturn = class (tform)
ส่วนตัว
{privatedeclarations}
Fusername: String;
Fusercount: จำนวนเต็ม;
procedureSetUserName (ค่า: สตริง);
functiongetUserName: String;
สาธารณะ
{PublicDeclarations}
PropertyUserName: StringReadGetUnAmeWritesetUserName;
PropertyUserCount: IntegerReadFuserCountWriteFuserCount;
จบ;
ประเภท 3.4
3.4.1 โปรโตคอลเคส
ชื่อประเภทของอักขระที่สงวนไว้จะต้องเป็นตัวพิมพ์เล็กทั้งหมด ประเภท Win32API มักจะเป็นตัวพิมพ์ใหญ่และตัวอักษรตัวแรกจะเป็นตัวพิมพ์ใหญ่สำหรับประเภทอื่น ๆ และตัวอักษรที่เหลือเป็นตัวพิมพ์เล็กเช่น:
วาจา
MyString: String; // ReservedWord
WindowHandle: hwnd; // win32apitype
I: Integer; // typeIdentifierIntroducedInsystemunit
3.4.2 ประเภทจุดลอยตัว
พยายามอย่าใช้ประเภทจริงมันต้องการที่จะเข้ากันได้กับรหัส Pascal เก่าและพยายามใช้สองประเภท ประเภทสองเท่าเป็นโปรเซสเซอร์ที่ได้รับการปรับปรุงและบัสข้อมูลและเป็นโครงสร้างข้อมูลมาตรฐานที่กำหนดโดย IEEE Extended จะถูกใช้เมื่อค่าอยู่นอกช่วงของสองเท่า แต่การขยายไม่ได้รับการสนับสนุนโดย Jave อย่างไรก็ตามประเภทเดียวอาจใช้เมื่อเขียน DLL ในภาษาอื่น
3.4.3 ประเภทการแจงนับ
ชื่อของประเภทการแจงนับจะต้องมีความหมายและชื่อของประเภทจะต้องเป็นคำนำหน้า 't' ชื่อของเนื้อหาของประเภท enum จะต้องมีตัวย่อของชื่อประเภท enum เช่น:
tsongtype = (Strock, Stclassical, Stcountry, Stalternative, stheavymetal, strb);
3.4.4 ประเภทอาร์เรย์
ชื่อของประเภทอาร์เรย์จะต้องมีความหมายและชื่อของประเภทจะต้องเป็นคำนำหน้า 't' หากคุณประกาศตัวชี้ไปที่ประเภทอาร์เรย์คุณต้องนำหน้า 'P' ก่อนชื่อประเภทนั้นตัวอย่างเช่น:
พิมพ์
pcyclearray =^tcyclearray;
tcyclearray = array [1..100] Ofinteger;
3.4.5 ประเภทบันทึก
ชื่อของประเภทบันทึกจะต้องมีความหมายและชื่อของประเภทจะต้องเป็นคำนำหน้า 't' หากคุณประกาศตัวชี้ไปที่ประเภทอาร์เรย์คุณต้องนำหน้า 'P' ก่อนชื่อประเภทนั้นตัวอย่างเช่น:
พิมพ์
pemployee =^temployee;
temployee = บันทึก
EmployeEname: String
Employerate: Double;
จบ;
หมวดหมู่ 3.5
3.5.1 การตั้งชื่อและรูปแบบ
ชื่อของคลาสจะต้องมีความหมายและชื่อของประเภทจะต้องเป็นคำนำหน้า 't' ตัวอย่างเช่น:
พิมพ์
tCustomer = คลาส (tobject)
ชื่อของอินสแตนซ์คลาสมักจะเป็นชื่อของคลาสที่ถูกลบออก 't' ตัวอย่างเช่น:
วาจา
ลูกค้า: Tcustomer;
ตัวแปรในชั้นเรียน 3.5.2
3.5.2.1 การตั้งชื่อและรูปแบบ
ชื่อของคลาสจะต้องมีความหมายและชื่อของประเภทจะต้องเป็นคำนำหน้า 'F' ตัวแปรทั้งหมดจะต้องเป็นสี่ในหนึ่ง หากคุณต้องการเข้าถึงตัวแปรนี้จากภายนอกคุณต้องประกาศคุณสมบัติ
วิธี 3.5.3
3.5.3.1 การตั้งชื่อและรูปแบบ
การตั้งชื่อและการจัดรูปแบบของฟังก์ชั่นและขั้นตอน
3.5.3.2 วิธีการเข้าถึงแอตทริบิวต์
วิธีการเข้าถึงแอตทริบิวต์ทั้งหมดจะต้องปรากฏในส่วนตัวหรือได้รับการป้องกัน การตั้งชื่อวิธีการเข้าถึงแอตทริบิวต์นั้นเหมือนกับการตั้งชื่อฟังก์ชั่นและขั้นตอน พารามิเตอร์ของวิธีการที่เขียนจะต้องมีชื่อว่า 'ค่า' และประเภทของมันสอดคล้องกับแอตทริบิวต์ที่จะเขียน ตัวอย่างเช่น:
tsomeclass = คลาส (tobject)
ส่วนตัว
FSOMEFIELD: จำนวนเต็ม;
ได้รับการคุ้มครอง
FunctionGetSomeField: จำนวนเต็ม;
ProcedureSetsomefield (ค่า: จำนวนเต็ม);
สาธารณะ
PropertySomeField: IntegerReadGetSomeFieldWritesetSomefield;
จบ;
3.6 คุณสมบัติ
3.6.1 การตั้งชื่อและรูปแบบ
ชื่อของตัวแปรของคลาสที่มีคำนำหน้า 'F' สอดคล้องกับการดำเนินการ
3.7 ไฟล์
3.7.1 ไฟล์โครงการ
3.7.1.1 โครงสร้างไดเรกทอรีโครงการ
โปรแกรม Home Directory - -bin (เส้นทางที่แอปพลิเคชันอยู่)
-DB (เส้นทางที่ฐานข้อมูลท้องถิ่นตั้งอยู่)
-doc (เส้นทางที่เอกสารอยู่)
-HLP (เส้นทางที่ไฟล์ช่วยเหลืออยู่)
-backup (เส้นทางสำรอง)
-tmp (เส้นทางไฟล์ชั่วคราว)
3.7.1.2 การตั้งชื่อ
ไฟล์โครงการต้องใช้ชื่อที่มีความหมาย ตัวอย่างเช่น: ไฟล์โครงการสำหรับข้อมูลระบบใน Delphi มีชื่อว่า sysinfo.dpr
ไฟล์ 3.7.2form
3.7.2.1 การตั้งชื่อ
สอดคล้องกับชื่อของแบบฟอร์ม: ตัวอย่างเช่น: หากชื่อของแบบฟอร์มคือ Formmain ดังนั้นชื่อของไฟล์ฟอร์มคือ formmain.frm
ไฟล์ 3.7.3Datamodule
3.7.3.1 การตั้งชื่อ
การตั้งชื่อของไฟล์ DataModule ควรสมเหตุสมผลและใช้ 'DM' เป็นคำนำหน้า ตัวอย่างเช่น: DataModule ผู้ใช้มีชื่อว่า 'dmcustomers.dfm'
ไฟล์ 3.7.4remotedatamodule
3.7.4.1 การตั้งชื่อ
การตั้งชื่อของไฟล์ remotedatamodule ควรเหมาะสมและใช้ 'rdm' เป็นคำนำหน้า ตัวอย่างเช่น: ผู้ใช้ remotedatamodule มีชื่อว่า 'rdmcustomers.dfm'
ไฟล์ 3.7.5UNIT
3.7.5.1 หน่วยปกติ
การตั้งชื่อไฟล์ 3.7.5.1.1UNIT
การตั้งชื่อของไฟล์หน่วยควรสมเหตุสมผลและใช้ 'หน่วย' เป็นคำนำหน้า ตัวอย่างเช่น: หน่วยทั่วไปมีชื่อว่า 'Uniteneral'
3.7.5.2Formunits
3.7.5.2.1 การตั้งชื่อ
ชื่อของไฟล์ formunit จะต้องสอดคล้องกับชื่อของแบบฟอร์ม ตัวอย่างเช่น: แบบฟอร์มหลักเรียกว่า formmain.pas ชื่อของไฟล์ formunit คือ: Unitformmain
3.7.5.3Datamoduleunits
3.7.5.3.1 การตั้งชื่อ
ชื่อของไฟล์ dataModuleunit จะต้องสอดคล้องกับชื่อของ dataModule ตัวอย่างเช่น: dataModule หลักเรียกว่า dmmain.pas จากนั้นชื่อของไฟล์ dataModuleunit คือ: Unitdmmain
3.7.5.4 ส่วนหัวไฟล์
วัตถุประสงค์ผู้แต่งวันที่และอินพุตและเอาต์พุตของไฟล์นี้ควรเขียนที่ส่วนหัวของไฟล์ทั้งหมด ตัวอย่างเช่น:
-
วันที่แก้ไข:
ผู้เขียน:
ใช้:
โครงสร้างโมดูลนี้ประกอบด้วย:
-
3.7.6Forms และ DataModulesforms
3.7.6.1form คลาส
1. มาตรฐานการตั้งชื่อคลาส
ชื่อของคลาสแบบฟอร์มควรเหมาะสมและใช้ 'tform' เป็นคำนำหน้า ตัวอย่างเช่น: ชื่อของคลาสเกี่ยวกับรูปแบบคือ:
taboutform = class (tform)
ชื่อของแบบฟอร์มหลักคือ
tmainform = class (tform)
2. มาตรฐานการตั้งชื่อสำหรับอินสแตนซ์คลาสแบบฟอร์ม
ชื่อของอินสแตนซ์คลาสฟอร์มควรสอดคล้องกับชื่อของคลาสแบบฟอร์มที่มี 't' ในช่วงเวลาเดียวกัน ตัวอย่างเช่น:
ชื่อพิมพ์
Instancename
taaboutform
เกี่ยวกับรูป
tmainform
รูปแบบหลัก
TCUSTOMERENTRYFORM
รูปแบบลูกค้า
3.7.6.2Datamodulesform
3.7.6.2.1.Datamoduleform การตั้งชื่อมาตรฐาน
การตั้งชื่อของคลาส DataModulesforms ควรมีความหมายและใช้ 'TDM' เป็นคำนำหน้า ตัวอย่างเช่น:
tdmcustomer = class (tdatamodule)
tdmorders = คลาส (tdatamodule)
3.7.6.2.2.Datamodule Instance Naming Standard มาตรฐาน
ชื่อของอินสแตนซ์คลาส DataModuleForm ควรเหมือนกับชื่อของคลาส DataModuleForm ที่มี 'T' ลดลงในเวลาเดียวกัน ตัวอย่างเช่น:
ชื่อพิมพ์
Instancename
TCUSTOMERDATAMODULE
CustomerDatamodule
tordersdatamodule
คำสั่งซื้อ
3.8 การควบคุม
3.8.1 การตั้งชื่ออินสแตนซ์ควบคุม
อินสแตนซ์ของการควบคุมควรใช้ชื่อของคลาสควบคุมที่ลบ 't' เป็นคำนำหน้าตัวอย่างเช่น:
ชื่อของ tedit ที่เข้าสู่ชื่อของผู้ใช้คือ: Editusername
3.8.2 ตัวย่อของการควบคุม
ชื่อของการควบคุมสามารถใช้กับตัวย่อต่อไปนี้ แต่ตัวย่อที่ใช้จะถูกเพิ่มระหว่างชื่อควบคุม '_':
3.8.2.1standardtab
MMTMAINMENU
PMTPOPUPMENU
mmitmainmenuitem
PMITPOPUPMENUITEM
lbltlabel
edttedit
memtmemo
btntbutton
cbtcheckbox
Rbtradiobutton
lbtlistbox
cbtcombobox
scbtscrollbar
GBTGROUPBOX
rgtradiogroup
pnltpanel
CltCommandList
3.8.2.2AdditionAltab
bbtntbitbtn
sbtspeedbutton
metmaskedit
sgtstringgrid
dgtdrawgrid
imgtimage
shptshape
bvltbevel
sbxtscrollbox
clbtchecklistbox
spltsplitter
stxtstaticText
chttchart
3.8.2.3win32tab
TBCTABCONTROL
PGCTPAGECONTROL
ผู้เขียน
retricedit
tbrttracbar
prbtprogressbar
udtupdown
hkthotkey
เกี่ยวกับสิ่งมีชีวิต
dtptdatimepicker
tvtreeview
lvtlistview
hdrtheaderControl
stbtstatusbar
tlbttoolbar
clbtcoolbar
3.8.2.4SystemTab
tmttimer
pbtpaintbox
mptmediaplayer
Olectolecontainer
ddcctddeclientconv
ddcitddeclientitem
ddsctddeserverconv
ddsitddeserveritem
3.8.2.5 internettab
csktclientsocket
ssktserversocket
WBDTWEBDISPATCHER
pptpageproducer
TptQueryTableProducer
dstptdatasettableproducer
nmdttnmdaytime
Nectnmecho
nftnmfinger
nftptnmftp
nhttptnmhttp
nmsgtnmmsg
nmsgtnmmsgserv
nntptnmnntp
npoptnmpop3
nuuptnmuuprocessor
smtptnmsmtp
nsttnmstrm
nstnmstrmserv
ntmtnmtime
nudptnmudp
psktpowersock
ngstnmgeneralserver
htmlthtml
urltnmurl
smltsimplemail
3.8.2.6DataaccessTab
DSTDATASOURCE
tblttable
QrytQuery
SPTSTORDPROC
dbtdatabase
ssntsession
bmtbatchmove
USQLTUPDATESQL
3.8.2.7datacontrolstab
dbgtdbgrid
dbntdbnavigator
dbttdbtext
dbetdbedit
DBMTDBMEMO
dbitdbimage
dblbtdblistbox
DBCBTDBCOMBOBOX
dbchtdbcheckbox
dbrgtdbradiogroup
dblltdblookuplistbox
dblctdblookupcombobox
dbretdbrichedit
dbcgtdbctrlgrid
DBCHTDBCHART
3.8.2.8DecisionCubetab
dcbtdecisioncube
dcqtdecisionQuery
dcstdecisionsource
dcptdecisionpivot
dcgtdecisionGrid
dcgrtdecisiongraph
3.8.2.9QReportTab
qrtquickreport
qrsdtqrsubdetail
qrbtqrband
qrcbtqrchildband
qrgtqrgroup
qrltqrlabel
qrttqrtext
qretqreexpr
qrstqrsysdata
qrmtqrmemo
qrrrttqrrichtext
qrdrtqrdbrichtext
qrshtqrshape
qritqrimage
qrditqrdbmimage
qrcrtqrcompositereport
qrptqrpreview
qrchtqrchart
3.8.2.10dialogstab
opendialogtopendialog
SAVEDIALOGTSAVEDIALOG
OpenPictureDialogTopenPictureGialog
savepicturedialogtsavepicturedialog
fontdialogtfontdialog
colordialogtColordialog
printdialogtprintdialog
PrintersetUpDialogTprintSetupDialog
FindDialogtFindDialog
ToplacedialogTreplacedialog
3.8.2.11win31tab
dblltdblookuplist
dblctdblookupcombo
TSTABSET
oltoutline
tnbttabbednotebook
NBTNOTEBOOK
hdrtheader
flbtfilelistbox
dlbtdirectorylistbox
DCBTDRIVECOMBOX
fcbtfiltercombobox
3.8.2.12Samplestab
ggtgauge
cgtcolorgrid
SPBTSPINBUTTON
spetspinedit
doltdirectoryline
Caltcalendar
iBeatibeventererter
3.8.2.13Activextab
cfxtchartfx
VSPTVSSpell
f1btf1book
Vtctvtchart
grptgraph
3.8.2.14midastab
prvtprovider
CDSTClientDataSet
qcdstQueryClientDataset
DCOMTDCONNECTION
Oleetoleenterpriseconnection
scktsocketconnection
RMSTREMOTESERVER
การเชื่อมต่อกลาง
4. แก้ไขข้อกำหนด
บทบัญญัติที่ทำในกฎเหล่านี้ใช้เฉพาะกับขั้นตอนที่รวมอยู่ในการจัดการการกำหนดค่า ในการแก้ไขดังกล่าวจำเป็นต้องเก็บเนื้อหาไว้ก่อนการดัดแปลงและระบุเนื้อหาที่ได้รับการแก้ไขและเพิ่มใหม่ และเพิ่มข้อมูลที่จำเป็นเช่น Modifyer, วันที่แก้ไข, คำแนะนำในการแก้ไข ฯลฯ ในส่วนหัวไฟล์
4.1 แก้ไขบันทึกประวัติ
เมื่อทำการปรับเปลี่ยนที่ได้รับอนุมัติไปยังไฟล์ต้นฉบับผู้แก้ไขควรเพิ่มรายการประวัติการแก้ไขในส่วนหัวไฟล์โปรแกรม ในการปรับเปลี่ยนแต่ละครั้งต่อมาผู้แก้ไขจะต้องกรอกข้อมูลต่อไปนี้ในรายการ:
แก้ไข
เวลาแก้ไข
เหตุผลในการปรับเปลี่ยน
วิธีแก้ไขคำแนะนำ
4.2 เพิ่มบรรทัดรหัสใหม่
บรรทัดรหัสใหม่ควรมีบรรทัดแสดงความคิดเห็นก่อนและหลัง
// แก้ไขบุคคล, เวลาในการแก้ไข, คำแนะนำในการแก้ไข
เพิ่มบรรทัดของรหัส
// สิ้นสุดการดัดแปลง
4.3 ลบบรรทัดรหัส
ใช้บรรทัดความคิดเห็นเพื่ออธิบายก่อนและหลังการลบบรรทัดรหัส
// แก้ไขบุคคล, เวลาในการแก้ไข, คำแนะนำในการแก้ไข
// บรรทัดของรหัสที่จะลบ (แสดงความคิดเห็นคำสั่งที่จะลบ)
// สิ้นสุดการดัดแปลง
4.4 แก้ไขบรรทัดรหัส
แก้ไขบรรทัดรหัสเพื่อลบบรรทัดรหัสและเพิ่มบรรทัดรหัสใหม่
// แก้ไขบุคคล, เวลาในการแก้ไข, คำแนะนำในการแก้ไข
// บรรทัดของรหัสก่อนการแก้ไข
// สิ้นสุดการดัดแปลง
// บรรทัดรหัสที่แก้ไขแล้ว
บรรทัดของรหัสที่แก้ไขแล้ว
// สิ้นสุดการดัดแปลง