1. مقدمة للمواصفات
تنص هذه المواصفات بشكل أساسي على القواعد والاحتياطات التي يجب أن تتبعها برامج مصدر دلفي أثناء عملية الكتابة. الغرض من كتابة هذه المواصفات هو الحفاظ على عادات كتابة التعليمات البرمجية المصدر لمطوري برامج الشركة متسقة. القيام بذلك يمكن لكل عضو في المجموعة فهم رمز أعضاء المجموعة الآخرين ، وذلك لتسهيل التطوير الثانوي لصيانة نظام ذاكرة الكود المصدر.
2. مواصفات التنسيق العام
2.1 المسافة البادئة
المسافة البادئة هي المساحة المعرضة لزيادة قابلية القراءة عندما يتغير مستوى البرنامج المصدر. قاعدة المسافة البادئة هي المسافة البادئة للمساحة لكل مستوى. علامة التبويب غير مسموح بها. لأن علامة التبويب ستنتج تأثيرات مختلفة بسبب الإعدادات المختلفة التي أدلى بها المستخدم. عندما تواجه البدء أو إدخال الحكم ، أضف حلقة ، معالجة استثناء ، مع بيان ، إعلان نوع السجل ، إعلان الفئة ، وما إلى ذلك. سيتم تخفيض إعلانات الفصل ، وما إلى ذلك بمستوى واحد. على سبيل المثال:
iftmpint <> 100then
tmpint: = 100 ؛
2.2 بيجن ..
يجب أن يشغل بيان البداية وبيان النهاية سطرًا واحدًا في برنامج المصدر ، على سبيل المثال:
fori: = 0to10dobegin // استخدام غير صحيح
نهاية؛
fori: = 0to10do // الاستخدام الصحيح
يبدأ
نهاية؛
2.3 المساحات
أضف مسافات في كلا طرفي المشغلين ورموز الحكم المنطقي ، مثل: i: = i+1 ؛ ، aandb ، وما إلى ذلك ، ولكن لا توجد حاجة إلى مسافات عند إضافة قوسين. على سبيل المثال: إذا (أ> ب) ثم // استخدام غير صحيح
إذا (أ> ب) ثم // الاستخدام الصحيح
على سبيل المثال: الإجراء (param1: integer ؛ param3: string) ؛
3.ObjectPascal قواعد النحوية مواصفات
3.1 كلمات محفوظة
يجب استخدام جميع الكلمات المحجوزة أو الكلمات الرئيسية في ObjectPascal في الأحرف الصغيرة.
3.2 العمليات والوظائف
3.2.1 التسمية والتنسيق
يجب أن تتكون جميع أسماء الإجراءات والوظائف من كلمات ذات معنى ، ويجب أن تكون الحرف الأول لجميع الكلمات في رسائل رأس المال. على سبيل المثال:
الإجراءات الإجراءات ؛ // تسمية غير صحيحة
الإجراءات formathardDisk ؛ // التسمية الصحيحة
يجب أن تستخدم العملية والوظيفة التي تحدد محتوى المتغير كمجموعة كبادئة ، على سبيل المثال:
الإجراءات
يجب استخدام العمليات والوظائف التي تقرأ المحتوى المتغير GET كبادئة ، على سبيل المثال:
functionGetGerName: String ؛
3.2.2 معلمات الإجراءات والوظائف
3.2.2.1 التسمية
تتم كتابة معلمات النوع الموحد في نفس الجملة:
الإجراءات (param1 ، param2 ، param3: integer ؛ param4: string) ؛
3.2.2.2 التسمية
يجب أن تكون جميع المعلمات ذات معنى ؛
الإجراءات (AuserName: String ؛ Auserage: Integer) ؛
3.2.2.3 تسمية الصراع
عندما تتضمن الوحدتين المستخدمتين وظيفة أو إجراء مكرر ، عندما تشير إلى هذه الوظيفة أو الإجراء ، سيتم تنفيذ الوظيفة أو الإجراء في الوحدة المعلنة في شرط الاستخدام. لتجنب مثل هذا "الاستخدامات المعتمدة على النقاء" ، من الضروري كتابة الوظيفة الكاملة أو مصدر العملية عند الإشارة إلى وظيفة أو عملية. على سبيل المثال:
Sysutils.findClose (SR) ؛
windows.findClose (مقبض) ؛
3.3 المتغيرات
3.3.1 التسمية المتغيرة والتنسيق
بادئ ذي بدء ، يجب إعطاء أسماء ذات معنى حتى يتمكن أعضاء المجموعة الآخرين من فهم المعنى الذي يمثله المتغير. عاصمة. على سبيل المثال:
var
WriteFormat :: String ؛
في الوقت نفسه ، بالنسبة لبعض الأنواع المحددة ، يمكن استخدام بعض الاختصارات على النحو التالي:
نوع المؤشر
ص
نوع السجل
التوصية
نوع الصفيف
arr
عطوف
فصل
عادةً ما تستخدم متغيرات التحكم في الحلقة حرفًا واحدًا مثل: I أو J أو K. بالإضافة إلى ذلك ، يُسمح أيضًا باستخدام اسم ذي معنى مثل userIndex.
3.3.2 المتغيرات المحلية
يتبع استخدام المتغيرات المحلية في العملية قواعد التسمية لجميع المتغيرات الأخرى.
3.3.3 المتغيرات العالمية
حاول عدم استخدام المتغيرات العالمية. على سبيل المثال:
GpreCuserCount: Point ؛ // المتغير العالمي مع اسم UserCount ، نوعه هو مؤشر لهيكل
ولكن يمكن استخدام المتغيرات العالمية داخل الوحدة. يجب أن تسبق جميع المتغيرات العالمية في الوحدات النمطية بـ "F". إذا كان تبادل البيانات مطلوبًا بين عدة وحدات ، فيجب تنفيذها من خلال إعلان السمات. على سبيل المثال:
يكتب
tformoverdreftreturn = فئة (tform)
خاص
{privatedEclarations}
المزيج: سلسلة ؛
fusercount: عدد صحيح ؛
الإجراءات steSetUserName (القيمة: سلسلة) ؛
functionGetGerName: String ؛
عام
{publicdeclarations}
PropertyUserName: stringReadGetUserNamewritesetSeRname ؛
PropertyUserCount: integerReadFuserCountWriteFuserCount ؛
نهاية؛
النوع 3.4
3.4.1 بروتوكول الحالة
يجب أن تكون أسماء الأحرف المحجوزة كلها صغيرة. عادة ما تكون أنواع Win32API ذات رسملة ، ويتم رسملة الحروف الأولى لأنواع أخرى ، والأحرف المتبقية هي صغيرة ، على سبيل المثال:
var
myString: سلسلة ؛ // المحفوظة
WindowHandle: hwnd ؛ // win32apitype
i: integer ؛ // typeidentifierIntrodiNtiNSystemUnit
3.4.2 نوع النقطة العائمة
حاول عدم استخدام النوع الحقيقي ، بل يريد فقط أن يكون متوافقًا مع رمز Pascal القديم ومحاولة استخدام النوع المزدوج. النوع المزدوج هو معالج محسّن وحافلة بيانات وهو عبارة عن بنية بيانات قياسية تحددها IEEE. يتم استخدام تمديد عندما تكون القيمة خارج نطاق مزدوج. لكن تمديده غير مدعوم من قبل جاف. ومع ذلك ، يمكن استخدام النوع الوحيد عند كتابة DLLs بلغات أخرى.
3.4.3 نوع التعداد
يجب أن يكون اسم نوع التعداد ذا معنى ويجب أن يكون اسم النوع مسبوقة "t". يجب أن يحتوي اسم محتوى نوع التعداد على اختصار اسم نوع التعداد ، على سبيل المثال:
Tsongtype = (Strock ، stclassical ، stcountry ، stalternative ، stheavymetal ، strb) ؛
3.4.4 نوع الصفيف
يجب أن يكون اسم نوع المصفوفة ذا معنى ويجب أن يكون اسم النوع مسبوقة "t". إذا أعلنت مؤشرًا إلى نوع صفيف ، فيجب عليك بادئة "P" قبل اسم هذا النوع ، على سبيل المثال:
يكتب
pcyclearray =^tcyclearray ؛
tcyclearray = صفيف [1..100] ofInteger ؛
3.4.5 نوع السجل
يجب أن يكون اسم نوع السجل ذا معنى ويجب أن يكون اسم النوع مسبوقة "T". إذا أعلنت مؤشرًا إلى نوع صفيف ، فيجب عليك بادئة "P" قبل اسم هذا النوع ، على سبيل المثال:
يكتب
pemploryee =^temworyee ؛
temworye = السجل
exteareeName: سلسلة
موظف: مزدوج ؛
نهاية؛
الفئة 3.5
3.5.1 التسمية والتنسيق
يجب أن يكون اسم الفصل ذا معنى ويجب أن يكون اسم النوع مسبوقة "T". على سبيل المثال:
يكتب
tcustomer = فئة (TOBJECT)
عادةً ما يكون اسم مثيل الفصل هو اسم الفصل مع إزالة "T". على سبيل المثال:
var
العميل: tcustomer ؛
المتغيرات في الفئة 3.5.2
3.5.2.1 التسمية والتنسيق
يجب أن يكون اسم الفصل مفيدًا ويجب أن يكون اسم النوع مسبوقة "F". يجب أن تكون جميع المتغيرات أربعة في واحد. إذا كنت بحاجة إلى الوصول إلى هذا المتغير من الخارج ، فأنت بحاجة إلى إعلان خاصية
الطريقة 3.5.3
3.5.3.1 التسمية والتنسيق
تسمية وتنسيق الوظائف والإجراءات.
3.5.3.2 طريقة الوصول إلى السمة
يجب أن تظهر جميع أساليب الوصول إلى السمات بشكل خاص أو محمي. تسمية طريقة الوصول إلى السمة هي نفس تسمية الوظائف والإجراءات. يجب تسمية المعلمة بالطريقة المكتوبة "القيمة" ، ونوعها متسقة مع السمة المراد كتابتها. على سبيل المثال:
tsomeClass = فئة (TOBJECT)
خاص
Fsomefield: عدد صحيح ؛
محمية
FunctionGetSomefield: Integer ؛
الإجراءات estersomefield (القيمة: عدد صحيح) ؛
عام
Propertysomefield: IntegerReadgetSomeFieldWritesEsesomefield ؛
نهاية؛
3.6 الخصائص
3.6.1 التسمية والتنسيق
تتوافق أسماء متغيرات الفصل مع البادئة "F" مع العملية.
3.7 ملف
3.7.1 ملف المشروع
3.7.1.1 هيكل دليل المشروع
دليل هوم البرنامج -bin (المسار الذي يوجد فيه التطبيق)
-DB (المسار حيث توجد قاعدة البيانات المحلية)
-DOC (المسار حيث يوجد المستند)
-HLP (المسار حيث يوجد ملف المساعدة)
-backup (مسار النسخ الاحتياطي)
-TMP (مسار الملف المؤقت)
3.7.1.2 التسمية
يجب أن يستخدم ملف المشروع اسمًا ذا معنى. على سبيل المثال: يسمى ملف المشروع لمعلومات النظام في Delphi Sysinfo.dpr.
3.7.2Form File
3.7.2.1 التسمية
تمشيا مع اسم النموذج: على سبيل المثال: إذا كان اسم النموذج formmain ، فإن اسم ملف النموذج هو formmain.frm.
3.7.3Datamodule ملف
3.7.3.1 التسمية
يجب أن يكون تسمية ملف Datamodule منطقيًا واستخدام "DM" كبادئة. على سبيل المثال: تم تسمية Datamodule المستخدم "dmCustomers.dfm".
3.7.4 remotedatamodule ملف
3.7.4.1 التسمية
يجب أن يكون تسمية ملف remotedatamodule منطقيًا واستخدام "RDM" كبادئة. على سبيل المثال: تم تسمية remotedatamodule remotedatamodule "rdmcustomers.dfm".
3.7.5 UNIT FILE
3.7.5.1 الوحدة العادية
3.7.5.1.1Unit ملف تسمية
يجب أن يكون تسمية ملف الوحدة منطقية واستخدام "الوحدة" كبادئة. على سبيل المثال: تسمى وحدة عامة "Unitgeneral".
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" كبادئة. على سبيل المثال: اسم فئة aboutform هو:
taboutform = فئة (tform)
اسم النموذج الرئيسي هو
tmainform = فئة (tform)
2. معايير التسمية لحالات فئة النموذج
يجب أن تكون أسماء مثيلات فئة النماذج متسقة مع أسماء فئة النموذج مع "T" خلال نفس الفترة. على سبيل المثال:
Typename
instancename
taaboutform
حول
tmainform
Mainform
tcustomerentryform
customerentryform
3.7.6.2Datamodulesform
3.7.6.2.1
يجب أن يكون تسمية فئة datamodulesforms منطقية واستخدام "tdm" كبادئة. على سبيل المثال:
tdmcustomer = فئة (tdatamodule)
tdmorders = فئة (tdatamodule)
3.7.6.2.2.datamodule مثيل التسمية معيار
يجب أن يكون اسم مثيل فئة Datamoduleform هو نفسه اسم فئة Datamoduleform مع قطرات "T" في نفس الوقت. على سبيل المثال:
Typename
instancename
tcustomerdatamodule
CustomerDatamodule
tordersdatamodule
OrdersDatamodule
3.8 الضوابط
3.8.1 تسمية مثيلات التحكم
يجب أن تستخدم مثيل عنصر التحكم اسم فئة التحكم التي تزيل "T" كبادئة ، على سبيل المثال:
اسم tedit الذي يدخل اسم المستخدم هو: editusername.
3.8.2 اختصار الضوابط
يمكن استخدام اسم عنصر التحكم مع الاختصار التالي ، ولكن يتم إضافة الاختصار المستخدم بين اسم التحكم "_":
3.8.2.1standardtab
Mmtmainmenu
PMTPOPUPMENU
Mmetmainmenuitem
PMITPOPUPMENUITEM
lbltlabel
edttedit
memtmemo
Btntbutton
CBTCHECKBOX
Rbtradiobutton
LBTLISTBOX
CBTCOMBOBOX
Scbtscrollbar
GBTGroupbox
Rgtradiogroup
pnltpanel
CltCommandList
3.8.2.2Additionaltab
bbtntbitbtn
Sbtspeedbutton
Metmaskedit
SgtstringGrid
DGTDRAWGRID
Imgtimage
sptshape
bvltbevel
sbxtscrollbox
clbtchecklistbox
spltsplitter
stxtstatictext
Chttchart
3.8.2.3win32tab
tbctabcontrol
PGCTPageControl
iltimagelist
Retrictedit
tbrttracbar
prbtprogressbar
udtupdown
hkthotkey
الأخلاق
dtptdatetimepicker
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
NMDTTNMDAYTY
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
sptstoredProc
DBTDATABASE
SSNTSASTER
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
QRCRTQRCOMPOSTEREPORT
qrptqrpreview
qrchtqrchart
3.8.2.10dialogstab
opendialogtopendialog
SaveAdialogtsavedialog
opicturedialogtopenpicturedialog
SavePicturedialogtsavePictureActialog
fontdialogtfontdialog
colordialogtcolordialog
printdialogtprintdialog
printersetupdialogtprintsetupdialog
FindDialogTfinddialog
استبدال replacedialog
3.8.2.11win31tab
dblltdblookuplist
DBLCTDBLOOKUPCOMBO
tsttabset
oltoutline
tnbttabbednotebook
nbtnotebook
HdrTheader
flbtfilelistbox
dlbtdirectorylistbox
DCBTDRIVECOMBOBOX
fcbtfiltercombobox
3.8.2.12Samplestab
ggtgauge
CGTColorGrid
spbtspinbutton
spetspinedit
doltdirectoryoutline
Caltcalendar
Ibeatibeventalerter
3.8.2.13activextab
CFXTCHARTFX
VSPTVSSPELL
F1BTF1Book
VTCTVTCHART
grptgraph
3.8.2.14midastab
prvtprovider
cdstclientdataset
QCDStqueryclientDataset
DComtdcomconnection
OleetoleenterPriseConnection
ScktsocketConnection
rmstremoteserver
midtmidasconnection
4. تعديل المواصفات
تنطبق الأحكام الواردة في هذه القواعد فقط على الإجراءات التي تم دمجها في إدارة التكوين. في مثل هذه التعديلات ، يجب الاحتفاظ بالمحتوى قبل التعديل وتحديد المحتوى المعدل والمضاف حديثًا. وإضافة المعلومات اللازمة مثل Modifyer ، تاريخ التعديل ، تعليمات التعديل ، إلخ إلى رأس الملف.
4.1 تعديل سجل التاريخ
عند إجراء تعديلات معتمدة على الملف المصدر ، يجب على المعدل إضافة عنصر سجل تعديل إلى رأس ملف البرنامج. في كل تعديل لاحق ، يجب على المعدل ملء المعلومات التالية في العنصر:
يُعدِّل
وقت التعديل
سبب التعديل
كيفية تعديل التعليمات
4.2 إضافة خط رمز جديد
يجب أن يكون خط الرمز الجديد قد علق الخطوط قبل وبعد.
// تعديل الشخص ، وقت التعديل ، تعليمات التعديل
سطر الكود المضافة
// نهاية التعديل
4.3 حذف خط الرمز
استخدم خطوط التعليقات لوصفها قبل حذف خط الرمز.
// تعديل الشخص ، وقت التعديل ، تعليمات التعديل
// سطر الكود المراد حذفه (التعليق على البيان المراد حذفه)
// نهاية التعديل
4.4 تعديل خط الرمز
قم بتعديل سطر الكود لحذف سطر الكود وإضافة خطوط رمز جديدة.
// تعديل الشخص ، وقت التعديل ، تعليمات التعديل
// سطر الكود قبل التعديل
// نهاية التعديل
// خط الكود المعدل
سطر التعليمات البرمجية المعدلة
// نهاية التعديل