zoukankan      html  css  js  c++  java
  • Delphi编码标准——过程和函数 转

    1. 命名与格式
    (1)过程名应当以大写字母开始,且大小写交错以增加可读性。
    下面是一个不正确的写法:
    procedure thisisapoorlyformattedroutinename;
    改成这样写就对了:
    procedure ThisIsMuchMoreReadableRoutineName;
    (2)过程名应当有意义。进行一个动作的例程最好在名称前加上表示动作的动词为前缀。
    例如:
    procedure FormatHardDrive;
    设置输入参数值的例程名应当以Set为其前缀,
    例如:
    procedure SetUserName;
    获取数值的例程名应当以Get为其前缀,
    例如:
    function GetUserName: string;
    2. 形参
    (1) 格式:只要可能,同一类型的形参应当归并在一起。
    例如:
    procedure ProcedureName (Param1, Param2, Param3: Integer; Param4: string);
    (2) 命名:所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母A为前缀
    例如:
    procedure ProcedureName (AUserName: string; AUserAge: integer);
    当参数名与类的特性或字段同名时,前缀A就有必要了。
    (3) 参数顺序:形参的顺序主要要考虑寄存器调用规则。最常用的参数应当作为第一个参数,按使用频率依次从左到右排。输入参数位于输出参数之前范围大的参数应当放在范围小的参数之前
    例如:
    procedure ProcedureName (APlanet, AContinent, ACountry, AState, ACity).
    有些则例外。
    例如:
    在事件处理过程中,TObject类型的Sender参数往往是第一个要传递的参数
    (4) 常量参数:要使记录、数组、短字符串或接口类型的参数不能被例程修改,就应当把形参标以Const。这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。
    如果其他类型的参数希望不被例程所修改,也可以标上C o n s t。尽管这对效率没有影响,但这给例程的调用者带来了更多的信息。
    (5) 命名冲突:当两个单元中含有相同名称的例程时,如果调用该例程,实际被调用的是Uses 子句中较后出现的那个单元中的例程。为避免这种情况,可在方法名前加想要的单元名,
    例如:
    SysUtils.FindClose (SR);
    Windows.FindClose(Handle);
    3.变量
    (1) 变量的命名与格式:变量的名称应当能够表达出它的用途。
    循环控制变量常常为单个字母,诸如I、J或K。也可以使用更有意义的名称,例如UserIndex
    布尔变量名必须能清楚表示出True和False值的意义。
    (2) 局部变量:局部变量用于例程内部,遵循其他变量的命名规则。如果需要的话,应当在例程的入口处立即初始化变量。
    局部的AnsiString类型的变量自动被初始化为空字符串;
    局部的接口和dispinterface类型的变量自动被初始化为nil;
    局部的Variant和OleVariant类型的变量自动被初始化为Unassigned
    (3) 全局变量:一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。
    全局变量可能只在单元的实现部分是全局的;
    全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用;
    全局数据可在声明时直接初始化为一个值。
    (注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0、nil、或Unassigned等空值。零初始化的全局变量在. EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。非零初始化的全局数据则在. E X E文件中占空间。)
    4.类型
    (1) 大小写规则:类型标识符是保留字,应当全部小写。Win32 API类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。
    例如:
    var
    MyString: string;         // 保留字
    WindowsHandle: HWND; // Win32 API 类型
    I: Integer;              //在S y s t e m单元中引入的类型标识
    (2)浮点型:不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下,对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用Extend。Extend是Intel专用的类型,Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写DLL ),则应当使用Single。
    (3) 枚举型:枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是个数据类型。枚举类型的标识符列表的前缀应包含2 ~ 3个小写字符,来彼此关联。
    例如:
    TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
    枚举类型的变量实例的名称与类型相同,但没有前缀T,也可以给变量一个更加特殊名称,诸如:FavoriteSongTpe1、FavoriteSongTpe2等等。
    (4)Variant和OleVariant:
    一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVariant;而对于非COM编程,则应当使用Variant。这是因为, Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即Wide Char字符串),且没有引用计数功能。
    5.构造类型
    (1) 数组类型:数组类型名应表达出该数组的用途。类型名必须加字母T为前缀。如果要声明一个指向数组类型的指针,则必须加字母P为前缀,且声明在类型声明之前。
    例如:
    type
    PCycleArray = ^TCycleArray;
    TCycleArray=array [1..100] of integer;
    实际上,数组类型的变量实例与类型名称相同,但没有T前缀。
    (2)记录类型:记录类型名应表达出记录的用途。类型名必须加字母T为前缀。如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。
    例如:
    type
    PStudent = ^ TStudent;
    TStudent = record
    StudentName: string;
    StudentAge: Double;
    6.类
    (1) 命名与格式
    类的名称应当表达出类的用途。类名前要加字母T,表示它是一个类型。
    例如:
    type
    TStudent= class (TObject);
    类的实例名称与类名相同,只不过没有前缀T。
    var
    Student: TStudent;
    注意关于组件的命名,请参阅6.6节“组件”。
    (2) 字段
    命名与格式:字段的命名遵循与变量相同的规则,只不过要加前缀F,表示这是字段。
    可见性:所有字段必须为私有。如果要在类的作用域之外访问字段,可借助于类的属性来实现。
    (3) 方法
    命名与格式:方法的命名遵循与过程和函数相同的规则。
    静态方法:当你不希望一个方法被派生类覆盖时,应当使用静态方法。
    虚拟方法与动态方法:当你希望一个方法能被派生类覆盖,应当使用虚拟方法。如果类的方法要被多个派生类直接或间接地使用,则应当用动态方法。
    例如:某一个类含有一个被频繁覆盖的方法,并有100个派生类,则应将方法定义为动态的,这样可以减少内存的开销。
    抽象方法:如果一个类要创建实例,则不要使用抽象方法。抽象方法只能在那些从不创建实例的基类中使用。
    属性访问方法:所有属性访问方法应当定义在类的私有或保护部分。属性访问方法遵循与过程和函数相同的规则。用于读的方法应当加G e t前缀,用于写的方法应当加Set前缀,并且有一个叫Value的参数,其类型与属性的类型相同。
    例如:
    TStudent = class (TObject)
    private
    FName: string;
    protected
    function GetName: string;
    procedure SetName (Value: string);
    public
    property Name: string read GetName write SetName;
    end;
    (4) 属性
    属性作为私有字段的访问器,遵循与字段相同的命名规则,只不过没有F前缀。属性名应为名词,而不是动词。属性是数据,而方法是动作。数组属性名应当是复数,而一般的属性应当是单数。
    (5) 访问方法的使用
    尽管不是必须,但还是建议你使用写访问方法来访问代表私有字段属性。
  • 相关阅读:
    算法题:N皇后-2
    算法题:串联所有单词的子串
    算法题:二叉树的垂序遍历
    算法题:只出现一次的数字 三
    算法题:等价多米诺骨牌对的数量
    算法:判定字符是否唯一
    算法题:字符串相乘
    算法题:字符串的排列
    算法题:单词规律
    算法题:连通网络的操作次数
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254545.html
Copyright © 2011-2022 走看看