1。仕様の紹介
この仕様は、主に、デルファイソースプログラムが執筆プロセス中に従うべきルールと予防策を規定しています。この仕様を作成する目的は、ソースコードの作成習慣を会社のソフトウェア開発者の習慣を一貫させ続けることです。そうすることで、各グループメンバーが他のグループメンバーのコードを理解して、ソースコードメモリシステムのメンテナンスの二次開発を促進することができます。
2。一般的な形式の仕様
2.1インデント
インデントとは、ソースプログラムのレベルが変更されたときに読みやすさを向上させるためにさらされる2つのスペースです。インデントのルールは、各レベルの2つのスペースをインデントすることです。タブは許可されていません。 TABは、ユーザーが作成したさまざまな設定により、さまざまな効果を生成するためです。遭遇すると、判断を開始または入力すると、ステートメント、レコードタイプの宣言、クラス宣言などがあります。クラス宣言などは1つのレベルで削減されます。例えば:
iftmpint <> 100then
tmpint:= 100;
2.2Begin..End
Begin StatementとEnd Statementは、ソースプログラムの単一行を占める必要があります。たとえば、:
fori:= 0to10dobegin //誤った使用法
終わり;
fori:= 0to10do //正しい使用法
始める
終わり;
2.3スペース
演算子の両端にスペースを追加し、次のような論理判断記号を追加します。i:= i+1;、aandbなど。ただし、ブラケットを追加するときはスペースは必要ありません。たとえば、(a> b)then //誤った使用法の場合
if(a> b)then //正しい使用法
例:procedureTest(param1:integer; param3:string);
3.オブジェクトパスカル文法執筆形式の仕様
3.1予約済みの単語
ObjectPascalのすべての予約済みの単語またはキーワードは、小文字で使用する必要があります。
3.2プロセスと機能
3.2.1ネーミングとフォーマット
手順と関数の名前はすべて意味のある単語で構成されている必要があり、すべての単語の最初の文字は大文字である必要があります。例えば:
procedureformatarddisk; //誤った命名
procedureformatharddisk; //正しい命名
変数のコンテンツを設定するプロセスと関数は、たとえば、次のようなプレフィックスとしてsetを使用する必要があります。
procedureSetusername;
変数コンテンツを読み取るプロセスと関数は、プレフィックスとして取得する必要があります。たとえば、:
functiongetUsername:string;
3.2.2手順と機能のパラメーター
3.2.2.1命名
統一型のパラメーターは、同じ文で書かれています。
procedurefoo(param1、param2、param3:integer; param4:string);
3.2.2.2命名
すべてのパラメーターは意味がある必要があります。また、パラメーター名とその他の属性名が繰り返される場合は、例えば次のようになります。
procedureSomeProc(ausername:string; auserage:integer);
3.2.2.3紛争の命名
使用される2つのユニットに重複する関数または手順が含まれる場合、この関数または手順を参照する場合、使用句で宣言されたユニットの関数または手順が実行されます。このような「句依存」を回避するには、関数またはプロセスを参照するときに、完全な関数またはプロセスソースを記述する必要があります。例えば:
sysutils.findclose(sr);
windows.findclose(handle);
3.3変数
3.3.1変数の命名と形式
まず、他のグループメンバーが変数によって表される意味を簡単に理解できるように、意味のある名前を指定する必要があります。資本。例えば:
var
writeformat :: string;
同時に、特定のタイプの場合、特定の略語を次のように使用できます。
ポインタータイプ
p
レコードタイプ
rec
配列タイプ
arr
親切
クラス
ループ制御変数は通常、I、J、Kなどの単一の文字を使用します。さらに、userindexなどの意味のある名前を使用することも許可されています。
3.3.2ローカル変数
プロセスでローカル変数を使用すると、他のすべての変数の命名ルールに従います。
3.3.3グローバル変数
グローバル変数を使用しないようにしてください。グローバル変数を使用する必要があります。変数のタイプを変数名に反映する必要があります。例えば:
gprecusercount:point; // usercountという名前のグローバル変数、そのタイプは構造へのポインターです
ただし、グローバル変数はモジュール内で使用できます。モジュール内のすべてのグローバル変数には、「F」が付いている必要があります。いくつかのモジュール間でデータ交換が必要な場合は、属性を宣言することで実装する必要があります。例えば:
タイプ
tformoverdraftreturn = class(tform)
プライベート
{privatedeclarations}
fusername:string;
Fusercount:整数;
procedureSetusername(value:string);
functiongetUsername:string;
公共
{publicdeclarations}
PropertyUsername:StringReadGetUserNameWriteSetUsername;
PropertyUsercount:integerreadfusercountwritefusercount;
終わり;
タイプ3.4
3.4.1ケースプロトコル
予約された文字のタイプ名はすべて小文字でなければなりません。 Win32APIタイプは通常すべて大文字であり、最初の文字は他のタイプのために大文字であり、残りの文字は小文字です。たとえば
var
myString:string; // remervedword
WindowHandle:hwnd; // win32apitype
I:integer; // typeidentifierIntroducedinsystemunit
3.4.2フローティングポイントタイプ
実際のタイプを使用しないようにしてください。古いPascalコードと互換性があり、ダブルタイプを使用したいだけです。ダブルタイプは、最適化されたプロセッサとデータバスであり、IEEEによって定義された標準的なデータ構造です。拡張は、値が2倍の範囲外にあるときに使用されます。しかし、拡張はJaveによってサポートされていません。ただし、他の言語でDLLを作成するときに単一のタイプを使用できます。
3.4.3列挙タイプ
列挙タイプの名前は意味があり、タイプの名前は「t」に接頭する必要があります。列挙タイプのコンテンツの名前には、列挙型名の略語が含まれている必要があります。
tsongtype =(ストロック、strassical、stcountry、stalternative、stheavymetal、strb);
3.4.4配列タイプ
配列タイプの名前は意味があり、タイプの名前は「t」に接頭する必要があります。配列タイプへのポインターを宣言する場合は、そのタイプの名前の前に「P」をプレフィックスする必要があります。
タイプ
pcyclearray =^tcyclearray;
tcyclearray = array [1..100] ofinteger;
3.4.5レコードタイプ
レコードタイプの名前は意味のあるものでなければならず、タイプの名前は 't'をプレフィックスする必要があります。配列タイプへのポインターを宣言する場合は、そのタイプの名前の前に「P」をプレフィックスする必要があります。
タイプ
pemployee =^temployee;
Temployee = Record
employeename:文字列
employeert:double;
終わり;
カテゴリ3.5
3.5.1ネーミングとフォーマット
クラスの名前は意味のあるものでなければならず、タイプの名前は 't'をプレフィックスする必要があります。例えば:
タイプ
tcustomer = class(tobject)
クラスインスタンスの名前は通常、「T」が削除されたクラスの名前です。例えば:
var
顧客:TCustomer;
クラス3.5.2の変数
3.5.2.1ネーミングと形式
クラスの名前は意味のあるものでなければならず、タイプの名前は「f」に接頭する必要があります。すべての変数は4つでなければなりません。外からこの変数にアクセスする必要がある場合は、プロパティを宣言する必要があります
方法3.5.3
3.5.3.1ネーミングとフォーマット
機能と手順の命名とフォーマット。
3.5.3.2属性アクセスメソッド
すべての属性アクセスメソッドは、プライベートまたは保護されている必要があります。属性アクセス方法の名前は、機能と手順の名前と同じです。記述されたメソッドのパラメーターには「値」と呼ばれる必要があり、そのタイプは記述する属性と一致しています。例えば:
tsomeclass = class(tobject)
プライベート
fsomefield:整数;
保護されています
functiongetsomefield:整数;
procedureSetSomeField(Value:Integer);
公共
PropertySomeField:IntegerReadGetSomeFieldWriteSetsomeField;
終わり;
3.6プロパティ
3.6.1ネーミングとフォーマット
接頭辞「F」を使用したクラスの変数の名前は、操作と一致しています。
3.7ファイル
3.7.1プロジェクトファイル
3.7.1.1プロジェクトディレクトリ構造
プログラムホームディレクトリ - ビン(アプリケーションが配置されているパス)
-DB(ローカルデータベースが配置されているパス)
-doc(ドキュメントが配置されているパス)
-HLP(ヘルプファイルが配置されているパス)
-backup(バックアップパス)
-tmp(一時ファイルパス)
3.7.1.2命名
プロジェクトファイルは意味のある名前を使用する必要があります。たとえば、Delphiのシステム情報のプロジェクトファイルには、sysinfo.dprという名前が付けられています。
3.7.2Formファイル
3.7.2.1命名
フォームの名前と一致して:たとえば、フォームの名前がフォームメインの場合、フォームファイルの名前はformmain.frmです。
3.7.3Datamoduleファイル
3.7.3.1命名
DataModuleファイルの命名は理にかなっており、「DM」を接頭辞として使用する必要があります。たとえば、ユーザーデータモジュールの名前は「dmcustomers.dfm」です。
3.7.4Remotedatamoduleファイル
3.7.4.1命名
Remotedatamoduleファイルの命名は理にかなっており、「RDM」を接頭辞として使用する必要があります。たとえば、ユーザーのRemotedatamoduleの名前は 'rdmcustomers.dfm'です。
3.7.5ユニットファイル
3.7.5.1通常のユニット
3.7.5.1.1ユニットファイルネーミング
ユニットファイルの命名は理にかなっており、「ユニット」をプレフィックスとして使用する必要があります。たとえば、一般的なユニットの名前は「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の名前と一致する必要があります。たとえば、メインのデータモジュールはdmmain.pasと呼ばれ、DataModuleUnitファイルの名前はunitdmmainです。
3.7.5.4ファイルヘッダー
このファイルの目的、著者、日付、および出力は、すべてのファイルのヘッダーに記述する必要があります。例えば:
{
変更日:
著者:
使用:
このモジュール構造は次のとおりです。
}
3.7.6 FORMSおよびDATAMODULESFORMS
3.7.6.1Formクラス
1.クラスの命名規格を参照します
Formsクラスの名前は理にかなっており、プレフィックスとして「tform」を使用する必要があります。たとえば、AboutFormクラスの名前は次のとおりです。
taboutform = class(tform)
メインフォームの名前はです
tmainform = class(tform)
2。フォームクラスインスタンスの命名基準
フォームクラスインスタンスの名前は、同じ期間中に「T」を持つフォームクラスの名前と一致する必要があります。例えば:
TypeName
Instancename
taaboutform
FORMについて
tmainform
MainForm
tcustomerentryform
CustomerEntryform
3.7.6.2Datamodulesform
3.7.6.2.1.DatamoduleFormネーミング標準
DataModulesformsクラスの命名は意味があり、「TDM」を接頭辞として使用する必要があります。例えば:
tdmcustomer = class(tdatamodule)
tdmorders = class(tdatamodule)
3.7.6.2.2.Datamoduleインスタンスネーミング標準
DataModuleFormクラスインスタンスの名前は、「T」ドロップが同時にドロップされているDataModuleFormクラスの名前と同じでなければなりません。例えば:
TypeName
Instancename
tcustomerdatamodule
customerdatamodule
Tordersdatamodule
Ordersdatamodule
3.8コントロール
3.8.1制御インスタンスの命名
コントロールのインスタンスでは、「T」を接頭辞として削除するコントロールクラスの名前を使用する必要があります。たとえば、:
ユーザーの名前を入力するteditの名前は次のとおりです。editusername。
3.8.2コントロールの略語
コントロールの名前は次の略語で使用できますが、使用される略語はコントロール名「_」の間に追加されます。
3.8.2.1StandardTab
mmtmainmenu
pmtpopupmenu
mmitmainmenuitem
pmypopupmenuitem
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
iltimagelist
Retrichedit
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
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
sptStoredProc
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
openpicturedialogtopenpicturedialog
savepicturedialogtsavepicturedialog
fontdialogtfontdialog
Colordialogtcolordialog
printdialogtprintdialog
printerSetupdialogtprintsetupdialog
finddialogtfinddialog
交換した
3.8.2.11win31tab
dblltdblookuplist
dblctdblookupcombo
tsttabset
oltoutline
tnbttabbednotebook
nbtnotebook
hdrtheader
FLBTFILELISTBOX
DLBTDIRECTORYLISTBOX
DCBTDRIVECOMBOBOX
fcbtfiltercombobox
3.8.2.12SampleStab
ggtgauge
cgtcolorgrid
spbtspinbutton
spetspinedit
doltdirectoryoutline
カルトカレンダー
ibeatibeventalerter
3.8.2.13ActiveXtab
CFXTCHARTFX
vsptvsspell
f1btf1book
vtctvtchart
grptgraph
3.8.2.14midastab
prvtprovider
cdstclientdataset
qcdstqueryclientdataset
dcomtdcomConnection
oleetoleenterpriseconnection
scktsocketConnection
rmstremoteserver
midtmidasconnection
4。仕様を変更します
これらのルールで行われた規定は、構成管理に組み込まれた手順にのみ適用されます。このような変更では、変更前にコンテンツを保持し、変更されたコンテンツと新しく追加されたコンテンツを特定する必要があります。また、Modifyer、Modification Date、Modification Instructionsなどの必要な情報をファイルヘッダーに追加します。
4.1履歴レコードを変更します
ソースファイルに承認された変更を加えると、Modifyerはプログラムファイルヘッダーに変更履歴アイテムを追加する必要があります。その後の各変更では、修正者は次の情報をアイテムの情報に記入する必要があります。
修正する
変更時間
変更の理由
指示を変更する方法
4.2新しいコードラインを追加します
新しいコード行は、前後に行にコメントする必要があります。
//人、変更時間、変更の指示を変更します
コードの行が追加されました
//変更の終了
4.3コード行を削除します
コメント行を使用して、コード行を削除する前後に説明します。
//人、変更時間、変更の指示を変更します
//削除するコードの行(削除されるステートメントにコメント)
//変更の終了
4.4コード行を変更します
コード行を変更してコード行を削除し、新しいコード行を追加します。
//人、変更時間、変更の指示を変更します
//変更前のコード行
//変更の終了
//修正コード行
コードの修正行
//変更の終了