a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 228|回复: 3

[专业语言] JAVA专业语言:Delphi源程序正确书写格式辅导笔记(一)

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
1,规范简介# d& b% @1 x- n8 Y
  本规范首要划定Delphi源轨范在书写过程中所应遵循的轨则及注重事项。编写该规范的目的是使公司软件开发人员的源代码书写习惯连结一致。这样做可以使每一个组员都可以理解其它组员的代码,以便于源代码的二次开发记忆系统的维护。
- A5 z5 T% P7 ~* C+ x! m2,一般名目规范% {' H9 C& c! e- x
2.1 缩进5 M0 H/ D2 @5 ]' S& r3 v
  缩进就是在当源轨范的级改变时为增添可读性而露出的两个空格。缩进的轨则为每一级缩进两个空格。禁绝许使用Tab。因为Tab会因为用户所作的设置分歧而发生分歧的效不美观。当碰着begin 或进入判定、轮回、异常措置、with语句、记实类型声明、类声明等的时侯增添一级, 当碰着end或退出判定、轮回、异常措置、with语句、记实类型声明、类声明等的时侯削减一级。例如:* A- d8 v: j2 _
if TmpInt  100 then! c. [- U+ u5 z2 z. m5 S
TmpInt := 100;
- I  \, F. W$ C2.2 Begin..End3 r2 K9 g8 H6 x8 I7 N
  begin语句和end语句在源轨范中要独有一行,例如:
* c2 `& b+ h5 L1 yfor I := 0 to 10 do begin //不正确的用法- l' `9 y3 }8 j6 q& z2 b$ |; ]* S
end;7 i( S$ f" |! q( D4 }0 z$ Y4 j
for I := 0 to 10 do //正确的用法
! v9 J/ G% s/ u2 @4 j8 ^begin2 _: R' _  s4 U* @( q& {; n
end;
# h) ?6 u+ C3 D# X% @8 p2.3 空格' I, G( `' V/ h* y5 r$ }4 Y
  在操作符及逻辑判定符号的两头添加空格,例如:I := I + 1;,a and b 等,但添加括号时不需要空格。例如:if ( a > b ) then //错误的用法
9 t. j8 v% r" S. R' BIf (a > b) then //正确的用法
7 Z, x5 K+ A# T2 v0 h- b2 \4 R2 F& K又例如:procedure Test(Param1: integer; Param3: string);; ?( _' i: T  L1 h2 Z! z; ]
) x9 e. F/ s: V8 e" ]; D
3. Object Pascal 语法书写名目规范
: ^) D- o1 X; o7 k8 x3.1 保留字
. d/ _( Z  |' i, r+ y# x! Z5 I  Object Pascal 说话的保留字或关头词应全数使用小写字母。
% Q5 D. D: I- m+ p. p
1 d0 b8 O9 P2 K8 _5 p2 l3.2 过程和函数& P4 d  x, Q! h* ^2 L9 E5 d
3.2.1命名及名目& r6 b- l2 }% r% T2 m& \4 k
  过程和函数的名称应全数使用有意义的单词组成,而且所有单辞书第一个字母应该使用年夜写字母。例如:
; o% d, e* U3 y. M1 Y8 [3 Xprocedure formatharddisk;//不正确的命名
8 i6 Z# M& D7 y" l% P$ ?procedure FormatHardDisk;//正确的命名. K! w, B. e8 l- a8 n" \* T& [9 d+ e
  设置变量内容的过程和函数,应使用Set作为前缀,例如: procedure SetUserName;5 N& [, b  b7 ^5 F. w7 E$ t; R2 u
  篡夺变量内容的过程和函数,应使用Get作为前缀,例如:function GetUserName: string;
! |9 `1 B8 q. O3.2.2 过程和函数的参数6 {& I, `9 G; A: B# n0 w4 Z
3.2.2.1命名. c$ h  O3 i% ^# o
  统一类型的参数写在统一句中:  procedure Foo(Param1, Param2, Param3: Integer; Param4: string);
, r+ l" \# R/ V( x3 R3.2.2.2命名  S9 R/ x% L# z2 W2 h
   所有参数必需是有意义的;而且当参数名称和其它属性名称重了的时辰,加一个前缀‘A’, 例如:* r; n* {8 W9 i, \# `/ z
procedure SomeProc(AUserName: string; AUserAge: integer);
* r, q% Q* N+ P/ L4 ^/ r3.2.2.3命名冲突
9 j$ U" `  q/ t8 I+ K  当使用的两个unit中搜罗一个闻名的函数或过程时, 那幺当你引用这一函数或过程时,将执行在use 子句中后声明的阿谁unit中的函数或过程。为了避免这种‘uses-clause-dependent’需要在引用函数或过程时,写完整函数或过程的出处。例如:  e; V, B3 S" z$ j+ h
SysUtils.FindClose(SR);
+ @7 p# J) B4 u, d: oWindows.FindClose(Handle);9 C7 T" V$ s  |4 s
3.3 变量
7 a! ]1 D; `7 ?- a4 X3.3.1 变量命名及名目7 Q, Q" f  E8 w' N
  首先所有变量必需起有意义的名字,使其它组员可以很轻易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,但每一单辞书首字母必需年夜写。例如: var WriteFormat::string;
: {( z; `" Q2 \# R+ q, C% G  V  同时对于一些特定类型可采用必然的简写如下:# n. |3 Z* @8 S
  指针类型      P + Y5 ?3 j7 f- v- Z
  记载类型      Rec * n- `4 ]1 [9 t- r; {8 @9 _; Z$ v% U
  数组类型      Arr   O/ ~7 b* X* ^; y8 L+ x
  类         Class
+ ^- H: X8 K: N4 f9 F
( j( Z( Z+ U4 @6 O! l  轮回节制变量凡是使用单一的字符如:i, j, 或 k。 此外使用一个有意义的名字例如:UserIndex ,也是准许的。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:45 | 显示全部楼层

JAVA专业语言:Delphi源程序正确书写格式辅导笔记(一)

</p>3.3.2 局部变量
9 l, |# V3 P( F  在过程中使用局部变量遵循所有其它变量的命名轨则。
' |2 T1 h; c2 q' i3.3.3 全局变量
, ]' E! e  D& }: ~% M  尽量不使用全局变量,如必需使用全局变量则必需加前缀‘g’,同时应在变量名称中浮现变量的类型。例如:& @* |' G+ n0 [
gprecUserCount: point;//名称为UserCount的全局变量,其类型为指向一结构的指针可是在模块内部可以使用全局变量。所有模块内全局变量必需用‘F’为前缀。如不美观几个模块之间需要进行资料交流,则需要经由过程声明属性的体例来实现。例如:
7 K& p( r3 |3 m- [* Vtype  r' s2 o7 z( H
TFormOverdraftReturn = class(TForm)7 `" L. N7 K3 M7 n' k. _
private/ ?' P) N& @8 x4 @  o  k; G" P% O$ u8 w6 M
{ Private declarations }
% t7 k0 t0 ~! j2 HFuserName: string;+ T7 N/ i! x7 q% |/ ^" b& N1 @# E9 y- R
FuserCount: Integer;
! |: W6 o& _- j0 _0 P; {Procedure SetUserName(Value: string);
" G) V0 J* U& R0 e2 Y# [0 [/ |, kFunction GetUserName: string;, J# u3 P; H5 {
public7 c3 M6 d  a; G4 u1 ^7 C/ F
{ Public declarations }
, h! c3 J: I( Q9 N* A$ fproperty UserName: string read GetUserName write SetUserName;
( E: d7 v  D6 F7 eproperty UserCount: Integer read FuserCount write FuserCount;
* W/ ]) D5 P, D( Uend;' y+ a+ p' \$ g  M: ^; k
3.4 类型! W) G* K1 J* a' A0 d+ j
3.4.1 巨细写和谈3 }7 g  f: U. m0 R' E
  保留字的类型名称必需全数小写。Win32 API 的类型凡是全数年夜写,对于其它类型则首字母年夜写,其余字母小写,例如:
- D( k% G9 K- y  t, vvar" {  I5 s2 q7 x8 Y
MyString: string; // reserved word% l1 L" B& ~+ L7 V( A7 R5 z8 S3 o
WindowHandle: HWND; // Win32 API type0 W$ i; g4 U4 l7 |
I: Integer; // type identifier introduced in System unit( W' Q$ ~" R$ k8 v$ B8 Q' @8 T
3.4.2 浮点类型. `% U# E0 x) y) l# T# I. r
  尽量不使用 Real 类型,他只是为了和旧的Pascal代码兼容,尽量使用Double 类型。Double 类型是对措置器和数据总线做过最优化的而且是IEEE界说的尺度数据结构。当数值超出Double典型围时,使用Extended 。但Extended不被Jave撑持。但使用其它说话编写的DLL时可能会使用Single 类型。
1 g" D9 k/ }( \  _( ^3.4.3 列举类型8 w& v/ e; C% i% W: L4 m
  列举类型的名字必需有意义而且类型的名字之前液S绨缀‘T’。列举类型的内容的名字必需包含列举类型名称的简写,例如:+ p" T- \1 x- S: ~- @( |$ Q
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
$ F* _. p$ R- H+ F3.4.4 数组类型
7 n) W, w- d8 e5 V; Z  数组类型的名字必需有意义而且类型的名字之前液S绨缀‘T’。如不美观声明一个指向数组类型的指针必需在该类型的名字之前加前缀‘P’,例如:5 R5 \' M, s. s0 u' o5 m0 ~
type3 ], m, Z, b2 A
PCycleArray = ^TCycleArray;
7 K( _* G+ [& \( ]7 RTCycleArray = array[1..100] of integer;  W; ^$ u) B9 C/ _. A
3.4.5记实类型: I6 _# q8 V0 Z- F* U
  记实类型的名字必需有意义而且类型的名字之前液S绨缀‘T’。如不美观声明一个指向数组类型的指针必需在该类型的名字之前加前缀‘P’,例如:
3 s9 m# E8 m+ C6 n' [type) b4 d, l* e5 q! m/ S( q' l
PEmployee = ^TEmployee;
3 Q. U. s) t4 B, D4 h2 o% V% CTEmployee = record. a; v/ }; W* W1 E! }
EmployeeName: string
) F7 }- T7 a# n; _" oEmployeeRate: Double;: t: E. `' B4 z- k+ H3 E, \
end;
& S$ l+ S7 O4 C
) Q- [: q, W- a# b- T3.5 类! Q' c  M% @/ h% k
3.5.1 命名及名目, k& {* S' v( V
  类的名字必需有意义而且类型的名字之前液S绨缀‘T’。例如:
2 E0 v$ c- `% ^2 j' J9 U" w8 Stype# H. N6 S% @5 y! y
TCustomer = class(TObject)
  C0 P( ]: ~# S* Z) V/ Y5 l$ k" i* ^类实例的名字凡是是去失踪‘T’的类的名字。例如:
: ^/ c, |- e$ B: ^+ d/ evar
3 n& F7 A/ _+ T! s5 vCustomer: TCustomer;
4 W$ U6 U  S8 \2 O/ {. p3.5.2 类中的变量* _) v" i# \5 N! a( I; u
3.5.2.1命名及名目
2 n& z5 |9 K* G  类的名字必需有意义而且类型的名字之前液S绨缀‘F’。所有的变量必需是四有的。如不美观需要年夜外部访谒此变量则需要声明一属性6 P) Q/ e5 C* U7 X" {$ N& ~
3.5.3 体例
% ]0 @1 d* M" ]1 k" y0 T% G3.5.3.1命名及名目7 ~  B3 l$ I  Z

( j- F. p% n- |( G; Q  同函数和过程的命名及名目。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:46 | 显示全部楼层

JAVA专业语言:Delphi源程序正确书写格式辅导笔记(一)

</p>3.5.3.2 属性访谒体例
( c* Y6 C! g: m9 z  所有的属性访谒体例必需呈此刻private 或 protected 中。属性访谒体例的命名同函数和过程的命名此外读体例(reader method)必需使用前缀‘Get’. 写体例(writer method)必需使用前缀‘Set’。写体例的参数必需命名为‘Value’,其类型同所要写的属性相一致。例如:
4 g+ Z5 O# G# y0 p0 ]8 O+ a% ATSomeClass = class(TObject)
0 ]( M0 ?3 Y0 K& F- i$ p% Pprivate
  J( u( A( L, E; r% xFSomeField: Integer;
! |, W7 h% Y6 |3 s% N- `protected
, ~& K8 ]6 Z8 N8 x7 u/ T% S) Hfunction GetSomeField: Integer;8 i$ D8 L, K" c' o+ Y; G6 X
procedure SetSomeField( Value: Integer);' n+ W* P) |; `$ v9 t
public
# f" ~; q: g7 C) T! O( F- ^, uproperty SomeField: Integer read GetSomeField write SetSomeField;
$ F5 Y+ ]0 [% v- n0 n# L/ d5 Send;' X: ^, S- K* {6 Z

9 x) w! x6 Q5 b2 Q+ v , }* R# P  v# X8 y
3.6 属性" I& G  j- A/ K( {
3.6.1 命名及名目
( u$ k" U4 B; J2 m( {0 D6 c  同其用操作的,出去前缀‘F’的类的变量的名称相一致 。7 W, U8 w5 N' o" }
3.7 文件
9 _; x  m! g3 g8 Y% U3.7.1项目文件; ~: c4 `. S6 u% [1 O
3.7.1.1项目目录结构
  f& J  u& Z2 R* W  轨范主目录--Bin(应用轨范地址路径)
; v& [% S4 t  V  -Db(当地数据库地址路径)+ b: G$ R8 e0 g+ }: G
  -Doc(文档地址路径): [1 b6 m$ [, @
  -Hlp(辅佐文件地址路径)
$ b2 S) [8 {& U  t+ N6 X4 t  -Backup(备份路径)
) D7 U' b8 V, A( n/ F$ T) M  -Tmp(姑且文件路径). Z! ]) r- }" Z* K7 o
3.7.1.2命名
- j4 |; o6 E- K# c7 `; s; ^   项目文件必需使用一个有意义的名字。例如: Delphi中系统信息的项目文件被命名为 SysInfo.dpr。! h$ i" O& T! L$ P0 Z, D8 `
3.7.2 Form 文件5 z! S; N8 |$ D# q8 ^% d: W
3.7.2.1命名
5 m3 w4 z' V+ W# a9 v  同Form的名称相一致:例如:Form的名称为FormMain则Form文件的名称就为FormMain.frm。3 h4 B6 g+ b7 ^  U' y, U/ }8 h- B
3.7.3 Data Module 文件& A- y- Q8 G: l' E
3.7.3.1命名
; Y. l. ^9 t' V; k, S8 e; z  W* D% i  data module文件的命名应该有意义,而且使用‘DM’作为前缀。例如:用户data module 被命名为‘DMCustomers.dfm’。
  H) ?  x9 F- S+ l: ~4 F0 T  J6 k3.7.4 Remote Data Module 文件5 C2 y7 {) J: K; q
3.7.4.1 命名
; w: v1 z9 f1 \$ s; b* V. d9 z1 f' Z3 d' C' n8 G
  remote data module文件的命名应该有意义,而且使用‘RDM’作为前缀。例如:用户remote data module 被命名为‘RDMCustomers.dfm’。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:47 | 显示全部楼层

JAVA专业语言:Delphi源程序正确书写格式辅导笔记(一)

</p>3.7.5 Unit文件( a+ Q% T0 o, X) i0 N& y$ M
3.7.5.1通俗 Unit" g7 b  B5 ?' |1 @
3.7.5.1.1 Unit文件命名  U0 j3 @8 `) z9 n
  unit文件的命名应该有意义,而且使用‘unit’作为前缀。例如:通用unit 被命名为‘UnitGeneral’。
# `$ J2 b8 Q5 I3.7.5.2 Form Units" c: g* {! l# ]" E6 }) T
3.7.5.2.1命名3 S+ L% j% x) m8 n+ t8 i: s
  Form unit 文件的名字必需和Form的名称连结一致。例如:主窗体叫FormMain.pas 则Form Unit文件的名字为:UnitFormMain。+ _) j: d" r2 G8 T# V' j! g2 ]7 d
3.7.5.3 Data Module Unis! H6 }1 P2 u4 U7 R0 u2 C9 T
3.7.5.3.1命名2 w( _; ]) |1 p
  Data Module unit 文件的名字必需和Data Module的名称连结一致。例如:主Data Module叫DMMain.pas 则Data Module Unit文件的名字为:UnitDMMain。6 p/ R( T1 f1 S
3.7.5.4 文件头
& q1 X# z9 m& b! Q$ W& N  在所有文件的托目应写上此文件的用途,作者,日期及输入和输出。例如:
4 v- u: F8 z' V5 Q# R{
& p3 N8 d/ K7 J1 a2 C. e! n0 _4 f改削弱期:2 v" L- W: D. a2 A( f* f; g
作者:
) M3 K" a. J; X: l% ?用途:; q1 @! z; {4 @  O, K  m$ a7 }, V( G6 F
本模块结构组成:
4 i* `- e6 c# E. K* L3 y}
5 O/ w, D' d9 p: Q3.7.6 Forms和Data Modules Forms
! N; q+ n. F9 i* Q3.7.6.1 Form类& @# M) f/ `  l2 z; ?
1. Form类命名尺度- }% f: U/ \$ s9 B" c+ j
  Forms类的命名应该有意义,而且使用‘TForm’作为前缀。例如: About Form类的名字为:7 O$ E0 X9 T: V! [3 r
TAboutForm = class(TForm)
. Y, H( p+ J- {' \+ z( g) |4 k" y主窗体的名字为
% g8 \# H  E2 m4 e: nTMainForm = class(TForm). A7 o- Y- O( t
2. Form类实例的命名尺度/ V2 f% a6 Y! S+ m$ [5 S, N
  Form 的类实例的名字应同期失踪‘T’的Form类的名字相一致。例如:3 y# d) r! H7 k' A. L+ Q
Type Name+ C( K! ^" D3 Y3 ~6 ^
Instance Name 3 ]/ E. M. n* n- o
TaboutForm
- U; \6 j7 w9 L1 k% e& A1 T' d( FAboutForm
) c0 d9 C* I4 q' p( jTmainForm/ u# P0 ^% I( K2 F
MainForm
; |2 Q+ T7 e. ITCustomerEntryForm
( N+ u+ g/ E  `4 `" _$ s5 ]CustomerEntryForm
$ o, [% x1 i, K4 f3.7.6.2 Data Modules Form
, d; }5 I  @7 R& O5 B3 S2 Q" Z; ]3 r3.7.6.2.1. Data Module Form 命名尺度
' R0 I- v% ~  _9 O  j/ X  Data Modules Forms类的命名应该有意义,而且使用‘TDM’作为前缀。例如:
: X5 m% w: [* \  g" `+ ?TDMCustomer = class(TDataModule)
4 H) P2 M% t  h. F! `% l6 l. x0 DTDMOrders = class(TDataModule)
' n4 x; O  N7 a3 q  T- {3 X3.7.6.2.2. Data Module 实例命名尺度
, T7 G# Q& R  f& ~   Data Module Form 的类实例的名字应同期失踪‘T’的Data Module Form类的名字相一致。例如:
6 h+ p& H% X: B, h' KType Name
2 W7 v9 x. W! F+ i1 L+ q! |Instance Name$ u& |4 |: u% T
TCustomerDataModule
- }, Z4 W1 c1 W( U+ A0 l; ECustomerDataModule( Z9 b# h: N1 r" {
TordersDataModule
# @# u  X# G# e" w% D0 tOrdersDataModule
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-3 11:31 , Processed in 0.535590 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表