1. 사양 소개
이 사양은 주로 델파이 소스 프로그램이 작문 과정에서 따라야하는 규칙과 예방 조치를 규정합니다. 이 사양을 작성하는 목적은 회사 소프트웨어 개발자의 소스 코드 작성 습관을 일관되게 유지하는 것입니다. 따라서 각 그룹 구성원은 소스 코드 메모리 시스템 유지 보수의 보조 개발을 용이하게하기 위해 다른 그룹 구성원의 코드를 이해할 수 있습니다.
2. 일반 형식 사양
2.1 들여 쓰기
들여 쓰기는 소스 프로그램의 수준이 변경 될 때 가독성을 높이기 위해 노출 된 두 공간입니다. 들여 쓰기 규칙은 각 레벨에 대해 두 개의 공간을 들여 보내는 것입니다. 탭은 허용되지 않습니다. 탭은 사용자가 만든 다른 설정으로 인해 다른 효과를 생성하기 때문입니다. 판단, 루프, 예외 처리, 명세서, 레코드 유형 선언, 클래스 선언 등을 시작하거나 판단, 루프, 예외 처리, 기록 유형 선언, 레코드 유형 선언, 클래스 선언 등은 한 수준으로 줄어 듭니다. 예를 들어:
iftmpint <> 100then
tmpint : = 100;
2.2begin.. 엔드
시작 명세서와 종료 명령문은 소스 프로그램에서 한 줄을 차지해야합니다.
fori : = 0to10dobegin // 잘못된 사용
끝;
fori : = 0to10do // 올바른 사용법
시작하다
끝;
2.3 공간
i : = i+1;, aandb 등과 같은 연산자의 양쪽 끝과 논리적 판단 기호에 공백을 추가하지만 브래킷을 추가 할 때는 공백이 필요하지 않습니다. 예를 들면 다음과 같습니다. if (a> b) // 잘못된 사용법
if (a> b) 그러면 // 사용량을 올바르게하십시오
예를 들면 다음과 같습니다. procedureTest (param1 : integer; param3 : string);
3. ObjectPascal 문법 쓰기 형식 사양
3.1 예약 된 단어
ObjectPascal의 모든 예약 된 단어 또는 키워드는 소문자로 사용해야합니다.
3.2 프로세스 및 기능
3.2.1 이름 지정 및 형식
절차와 기능의 이름은 모두 의미있는 단어로 구성되어야하며 모든 단어의 첫 글자는 대문자로되어야합니다. 예를 들어:
ProcedureformatardDisk; // 잘못된 이름 지정
ProcedureformathardDisk; // 정확한 명명을 올바르게합니다
변수의 내용을 설정하는 프로세스 및 기능은 예를 들어 접두사로 설정해야합니다.
ProcessETUSERNAME;
가변 콘텐츠를 읽는 프로세스 및 기능은 Get As As Prefix를 사용해야합니다.
functiongetUsername : 문자열;
3.2.2 절차 및 기능의 매개 변수
3.2.2.1 명명
통합 유형의 매개 변수는 동일한 문장으로 작성됩니다.
procedurefoo (param1, param2, param3 : 정수; param4 : String);
3.2.2.2 명명
모든 매개 변수는 의미가 있어야하며 매개 변수 이름 및 기타 속성 이름이 반복적이어야합니다.
ProcessOmeProc (Ausername : String; Auserage : Integer);
3.2.2.3 명명 충돌
사용 된 두 단위에 중복 함수 또는 절차가 포함 된 경우,이 기능 또는 절차를 참조 할 때 사용 절에서 선언 된 단위의 기능 또는 절차가 실행됩니다. 이러한 '사용-클레이브 의존적'을 피하려면 함수 또는 프로세스를 참조 할 때 완전한 기능 또는 프로세스 소스를 작성해야합니다. 예를 들어:
sysutils.findclose (sr);
Windows.FindClose (핸들);
3.3 변수
3.3.1 변수 이름 지정 및 형식
다른 그룹 구성원은 변수로 표시되는 의미를 쉽게 이해할 수 있도록 의미있는 이름을 주어야합니다. 수도. 예를 들어:
var
writeformat :: 문자열;
동시에, 특정 유형의 경우 특정 약어를 다음과 같이 사용할 수 있습니다.
포인터 유형
피
레코드 유형
rec
배열 유형
arr
친절한
수업
루프 제어 변수는 일반적으로 다음과 같은 단일 문자를 사용합니다. i, j 또는 k. 또한 userIndex와 같은 의미있는 이름을 사용하는 것도 허용됩니다.
3.3.2 로컬 변수
프로세스에서 로컬 변수를 사용하면 다른 모든 변수에 대한 명명 규칙이 따릅니다.
3.3.3 글로벌 변수
글로벌 변수를 사용하지 마십시오. 글로벌 변수를 사용해야하는 경우 'G'를 접두사해야합니다. 예를 들어:
gprecusercount : point; // 이름을 가진 글로벌 변수, 그 유형은 구조에 대한 포인터입니다.
그러나 글로벌 변수는 모듈 내에서 사용될 수 있습니다. 모듈의 모든 글로벌 변수는 'f'로 접두사를해야합니다. 여러 모듈간에 데이터 교환이 필요한 경우 속성을 선언하여 구현해야합니다. 예를 들어:
유형
tformoverdraftreturn = class (tform)
사적인
{privatedeclarations}
fusername : 문자열;
Fusercount : 정수;
ProcessETUSERNAME (value : String);
functiongetUsername : 문자열;
공공의
{publicdeclarations}
PropertyUserName : StringReadGetUserNamewriteseTusername;
PropertyUserCount : integerReadFuserCountWriteFuserCount;
끝;
타입 3.4
3.4.1 사례 프로토콜
예약 문자의 유형 이름은 모두 소문자 여야합니다. Win32api 유형은 일반적으로 대문자이며, 첫 번째 문자는 다른 유형의 대문자이며 나머지 문자는 소문자입니다.
var
mystring : String; // reservedword
Windowhandle : hwnd; // win32apitype
I : 정수; // typeidentifierintructedInsystemUnit
3.4.2 플로팅 포인트 유형
실제 유형을 사용하지 말고 기존 파스칼 코드와 호환되고 이중 유형을 사용하려고 노력하십시오. 이중 유형은 최적화 된 프로세서 및 데이터 버스이며 IEEE에 의해 정의 된 표준 데이터 구조입니다. 확장은 값이 이중 범위를 벗어난 경우 사용됩니다. 그러나 확장은 Jave가 지원하지 않습니다. 그러나 다른 언어로 DLL을 작성할 때 단일 유형을 사용할 수 있습니다.
3.4.3 열거 유형
열거 유형의 이름은 의미가 있어야하며 유형의 이름은 't'를 접두사해야합니다. 열거 유형의 내용 이름은 열거 유형 이름의 약어를 포함해야합니다.
tsongtype = (Strock, stclassical, stcountry, 구조적, 홍보, strb);
3.4.4 배열 유형
배열 유형의 이름은 의미가 있어야하며 유형의 이름은 't'를 접두사해야합니다. 배열 유형에 대한 포인터를 선언하는 경우 해당 유형의 이름 앞에서 'P'를 접두사해야합니다.
유형
pcyclearray =^tcyclearray;
tcyclearray = 배열 [1..100] ofinteger;
3.4.5 레코드 유형
레코드 유형의 이름은 의미가 있어야하며 유형의 이름은 't'를 접두사해야합니다. 배열 유형에 대한 포인터를 선언하는 경우 해당 유형의 이름 앞에서 'P'를 접두사해야합니다.
유형
pemployee =^temployee;
Temployee = 레코드
Employeename : String
직원 : 이중;
끝;
카테고리 3.5
3.5.1 이름 지정 및 형식
클래스의 이름은 의미가 있어야하며 유형의 이름은 't'를 접두사해야합니다. 예를 들어:
유형
tcustomer = class (tobject)
클래스 인스턴스의 이름은 일반적으로 't'가 제거 된 클래스의 이름입니다. 예를 들어:
var
고객 : Tcustomer;
클래스 3.5.2의 변수
3.5.2.1 이름 지정 및 형식
클래스의 이름은 의미가 있어야하며 유형의 이름은 'f'를 접두사해야합니다. 모든 변수는 4-10이어야합니다. 외부 에서이 변수에 액세스 해야하는 경우 속성을 선언해야합니다.
방법 3.5.3
3.5.3.1 이름 지정 및 형식
함수 및 절차의 이름 지정 및 형식.
3.5.3.2 속성 액세스 방법
모든 속성 액세스 방법은 비공개로 또는 보호 된 상태로 나타나야합니다. 속성 액세스 방법은 기능과 절차의 이름을 지정하는 것과 동일합니다. 작성된 메소드의 매개 변수는 'value'로 명명되어야하며 그 유형은 쓸 수있는 속성과 일치합니다. 예를 들어:
tsomeclass = class (tobject)
사적인
Fsomefield : 정수;
보호
FunctionGetSomefield : 정수;
ProceduresetSomefield (값 : 정수);
공공의
PropertySomefield : IntegerReadgetSomeFieldWritesOtSomefield;
끝;
3.6 속성
3.6.1 이름 지정 및 형식
Prefix '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 인 경우 양식 파일의 이름은 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.5 단위 파일
3.7.5.1 일반 장치
3.7.5.1.1Unit 파일 이름 지정
장치 파일의 이름 지정은 합리적이며 '단위'를 접두사로 사용해야합니다. 예를 들어 : 일반 장치의 이름이 'unitGeneral'입니다.
3.7.5.2formunits
3.7.5.2.1 이름 지정
FormUnit 파일의 이름은 양식의 이름과 일치해야합니다. 예를 들어 : 기본 형식은 formmain.pas라고하며, 포름 파일의 이름은 iting formmain입니다.
3.7.5.3datamoduleUnits
3.7.5.3.1 이름 지정
DatamoDuleUnit 파일의 이름은 DatamoDule의 이름과 일치해야합니다. 예를 들어, 기본 데이터 모드는 dmmain.pas라고하며 DatamoDuleUnit 파일의 이름은 itsdmmain입니다.
3.7.5.4 파일 헤더
이 파일의 목적, 저자, 날짜 및 입력 및 출력은 모든 파일의 헤더에 작성해야합니다. 예를 들어:
{
수정 날짜 :
작가:
사용:
이 모듈 구조는 다음으로 구성됩니다.
}
3.7.6forms 및 datamodulesforms
3.7.6.1 형식 클래스
1. 수업 명명 표준을 형성합니다
양식 클래스의 이름은 합리적이며 'tform'을 접두사로 사용해야합니다. 예를 들어 : AboutForm 클래스의 이름은 다음과 같습니다.
taboutform = class (tform)
주요 형식의 이름은입니다
tmainform = 클래스 (tform)
2. 양식 클래스 인스턴스에 대한 명명 표준
양식 클래스 인스턴스의 이름은 같은 기간 동안 't'가있는 양식 클래스의 이름과 일치해야합니다. 예를 들어:
타이프 이름
InstanceName
taaboutform
정보
tmainform
메인 형식
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.2.DatamoDule 인스턴스 명명 표준
DatamoDuleForm 클래스 인스턴스의 이름은 't'가 동시에 DatamoDuleForm 클래스의 이름과 동일해야합니다. 예를 들어:
타이프 이름
InstanceName
tcustomerdatamodule
CustomerDatAmodule
Tordersdatamodule
OrdersDatAmodule
3.8 컨트롤
3.8.1 제어 인스턴스의 이름 지정
컨트롤 인스턴스는 't'를 접두사로 제거하는 제어 클래스의 이름을 사용해야합니다.
사용자 이름을 입력 한 테디의 이름은 다음과 같습니다. editusername.
3.8.2 대조군의 약어
제어 이름은 다음 약어와 함께 사용할 수 있지만 사용 된 약어는 제어 이름 '_'사이에 추가됩니다.
3.8.2.1 주차
mmtmainmenu
pmtpopupmenu
mmitmainmenuitem
pmitpopupmenuitem
lbltlabel
edttedit
Memtmemo
btntbutton
CBTCheckbox
RBTRADIOBUTTON
lbtlistbox
CBTComBobox
scbtscrollbar
GBTGroupbox
rgtradiogroup
pnltpanel
cltcommandlist
3.8.2.2additionaltab
bbtntbittn
SBTSPEEDBUTTON
MetMaskEdit
sgtstringgrid
dgtdrawgrid
imgtimage
shptshape
bvltbevel
sbxtscrollbox
clbtchecklistbox
spltsplitter
stxtStaticText
chttchart
3.8.2.3WIN32TAB
TBCTABCONTROL
pgctpagecontrol
Iltimagelist
리트리치
tbrttracbar
prbtprogressbar
udtupdown
hkthotkey
항문
dtptdateTimepicker
tvtreeview
lvtlistview
hdrtheadercontrol
STBTSTATUSBAR
tlbttoolbar
clbtcoolbar
3.8.2.4SYSTEMTAB
tmttimer
pbtpaintbox
mptmediaplayer
올렉토 컨테이너
DDCCTDDECLIENTCONV
ddcitddeclientEtem
DDSCTDDESERVERCONV
ddsitddeserveritem
3.8.2.5 Internettab
csktclientsocket
ssktserversocket
WBDTWEBDISPATCHER
pptpage -froducer
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
dblltddblookuplistbox
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
dblltddblookuplist
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
QCDSTQUERYCLIENDDATASET
dcomtdcomconnection
OleetoleenterPriseConnection
scktsocketconnection
RMSTREMOTESERVER
미드 마디 스코 닉
4. 사양을 수정하십시오
이 규칙의 조항은 구성 관리에 통합 된 절차에만 적용됩니다. 이러한 수정에서는 수정 전에 컨텐츠를 유지하고 수정 된 새로 추가 된 컨텐츠를 식별해야합니다. 수정어, 수정 날짜, 수정 지침 등과 같은 필요한 정보를 파일 헤더에 추가하십시오.
4.1 역사 기록을 수정하십시오
소스 파일에 승인 된 수정을 할 때 Modifyer는 프로그램 파일 헤더에 수정 기록 항목을 추가해야합니다. 각 후속 수정에서 Modifyer는 항목의 다음 정보를 작성해야합니다.
수정하다
수정 시간
수정 이유
지침 수정 방법
4.2 새 코드 라인을 추가하십시오
새 코드 라인은 전후에 주석을 주어야합니다.
// 사람, 수정 시간, 수정 지침을 수정합니다
추가 코드 라인
// 수정 종료
4.3 코드 라인을 삭제합니다
코드 라인을 삭제하기 전후에 설명하는 주석 줄을 사용하십시오.
// 사람, 수정 시간, 수정 지침을 수정합니다
// 삭제할 코드 줄 (삭제 될 문을 주석)
// 수정 종료
4.4 코드 라인을 수정하십시오
코드 라인을 수정하여 코드 라인을 삭제하고 새 코드 라인을 추가하십시오.
// 사람, 수정 시간, 수정 지침을 수정합니다
// 수정 전 코드 줄
// 수정 종료
// 수정 된 코드 라인
수정 된 코드 라인
// 수정 종료