命名规则

排版约定

  1. 字段:私有字段、受保护字段(尽量不要使用公有字段)
  2. 属性:私有属性、受保护属性、公有属性
  3. 事件:私有事件、受保护事件、公有事件
  4. 构造函数:参数数量最少的构造函数,参数数量中等的构造函数,参数数量最多的构造函数
  5. 方法:重载方法的排列顺序与构造函数相同,从参数数量最少往下至参数最多。方法按照功能分块即可,不需要按照私有、保护、公有分布。

命名的基本约定

缩写

尽量不要缩写名字,名字长没关系,尽可能描述清楚。

命名方法

命名采用驼峰规则,不采用下划线分割规则。

  1. Pascal命名法:每个单词首字母大写。
  2. Camel命名法:第一个单词首字母小写,其余单词首字母大写。

类型前缀

不管是类型还是变量等,都不要加类型前缀。

  1. 比如CButton,直接写成Button。
  2. 变量名前一般不用加类型前缀。比如int nNum,直接写成int num即可。

文件夹命名

Unity工程中所有C#代码的文件夹命名,都必须使用英文全拼,遵循Pascal大小写规范。

文件命名

所有的C#源代码文件,命名都使用英文全拼,都必须遵循Pascal大小写规范。

命名空间

  1. 使用Pascal命名法
  2. 命名空间采用YZGame开头,比如YZGameEngine。

  1. 使用Pascal命名法。
  2. 类名要用名词。模板类开头用T。

接口

  1. 使用Pascal命名法。
  2. 接口开头用I。接口名要用名词。

枚举

  1. 枚举类型和枚举常量都使用Pascal命名法。
  2. 不需要在类型或者枚举常量的前后加上Enum前缀。

函数

  1. 使用Pascal命名法。
  2. 函数名最好用动词开头。

委托和事件

  1. 使用Pascal命名法。
  2. 使用动词短语命名。

属性

  1. 使用Pascal命名法。

特性(Attribute)

  1. 用名词或名词短语+Attribute方式命名特性,保证特性名清晰,尽量达到望文生义的境界。
  2. 采用Pascal方式命名,尽量少用或不用缩写,若使用了缩写一定要在注释中详细注明特性的用途。

变量

  1. 使用Camel命名法。
  2. 类非静态成员变量用m开头。
  3. 类的静态成员变量用s开头。函数内的静态变量需用s开头。
  4. 类的公有成员变量大写开头,不需要加前缀,尽量用属性代替公有变量。

常量

  1. 所有单词大写,多个单词之间用下划线隔开,比如public const int PAGE_INDEX = 6;

代码缩进

  1. 大括号各占一行对齐,而不是将左大括号放在行尾。
  2. 代码缩进使用Tab键实现,最好不要使用空格,为保证在不同机器上使代码缩进保持一致,设置Tab键宽度为4个字符。
  3. if、while、for等关键词后应有一个空格[eg. “if (a == b)”]
  4. 运算符前后应各有一个空格[eg. “a = b + c;”]

长度

行长度

每一行代码的行长度,建议 不要超过110个字符。如果超过这个长度,可以按照以下规则换行:

  1. 在逗号后换行。
  2. 在操作符前换行。
  3. 第一条优先于第二条。

函数长度

建议单个函数长度不要超过80行。越简短越好。

注释

  1. 尽量少写注释,做到代码自解释。
  2. 尽量用最简单直接的代码实现功能,减少冗余的代码。
  3. 逻辑复杂的地方加上关键注释即可。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace YZGameEngine
{
class Game
{
private string mName;
public string Name
{
get
{
return Name;
}
}
private static int sNum;
public static string Type;

public InitGame(string name)
{
mName = name;
int num = 0;
sNum = num;
}
}
}

防御性编程

安全编程

  1. 对象使用前必须判空引用,尤其函数参数或者函数调用或者集合返回的对象,使用前必须判空。
  2. 尽可能避免使用异常,通过其它方式避免出现错误或者异常,比如代码逻辑保证或者返回值判断。

性能编程

预计算

  1. UI控件必须在初始化的时候通过find获得,而不是在使用的时候频繁获得。
  2. 不要频繁使用GetComponent获得组件,可以在初始化时候缓存引用。

经验

  1. 尽可能不要使用foreach。
  2. 避免重复使用string,因为C#中的string是定长并分配在堆上的,每次赋值都会重新创建一个新的string,可以使用StringBuilder来构建字符串。

其它

待补充。。。


版权声明:

本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自远行’s Life,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://xiaopengcheng.top/2018/12/19/Unity3d代码规范/