参考VCL的代码,结合笔者近两年来的一些经验,可以简单总结出一套Delphi下常用的命名规范。
- 类型定义(type)
- 包括class、record、枚举、procedure/function变量等所有写在type下的类型定义
- 用大写的T开头,例如TList(class)、TPoint(record)、TAlign(枚举)、TNotifyEvent(procedure变量)
- 常量(const)
- 自定义的简单类型常量(如Integer、Pointer等类型)建议用C开头
- 也有不少常量是需要根据单词意思推断的,如MaxDateTime(以Max开头,让人从意思上猜到是常量)
- 字符串常量用S开头(因为字符串常量与简单类型常量在编译时处理方式不同,详情可参考《Delphi源代码分析》2.2.4常量)
- 类的private成员变量、implementation下的全局变量
- 用F开头
- 类里绝对不要出现public成员变量,所有要公开的属性用property或者procedure、function代理出来
- interface下的全局变量
- interface下最好不要出现全局变量,可以替换为用interface里的function返回implementation下的全局变量值
- 如果一定要有的话,用G开头
- 局部变量
- 函数(procedure或function)实参
除了这些以外,笔者有一些自己常用的Delphi编程习惯,拿出来跟大家分享,欢迎拍砖。
- 用项目缩写做名字开头
- 由于Delphi里没有C++中的namespace或者Java里的package这些概念,所以名字冲突问题比较严重。为了尽量避免这种问题,可以在一个项目的专有全局类型、常量前面加上项目名称的缩写。例如对于一个叫做MyProject的项目,其下的专属类可以叫做TMPOneClass,常量可以叫做CMPOneNumber,等等。
- 用function代替全局变量
- 当我们需要访问剪切板时,会用到Clipboard这个对象,不知道大家有没有注意到,这其实是一个返回TClipboard对象的function,而且还用到了设计模式的Singleton模式。
- 由于Delphi里调用无参函数可以不写括号,所以很多时候可以把一个function当做一个变量使用,具体怎么用大家可以发散一下思维,Singleton只是其中一个例子。
- 用Pascal命名法
- 上面这些命名方式,总得来说是根据Pascal命名法演化而来的。
- Pascal命名法的基本思想就是一个名字里如果包含多个单词,每个单词的首字母都要大写,例如ThisIsAnExample。
- 不建议使用下划线命名法(如this_is_an_example),主要是因为Delphi的变量名自动补全工具不会自动过滤下划线,手动输入比较累。。。
- 由于Delphi中变量名对大小写不敏感(如A和a其实是同一个变量,这是跟C语系的语言最大的不同),所以绝对不要尝试用字母大小写区分变量,所有变量最好都用大写字母开头。
|
请发表评论