代码编写规范
开发中,大量使用lua,暂时根据当前状况,总结相对而言较好的规范,在多人协作中可以更好的开发、交流。
介绍
该文档旨在为使用lua编写应用程序建立编码指南。
制订编码规范的目的:
●统一编码标准,通用。提高开发效率;
●使代码通俗易懂,易于维护。
切记:善用调试器。
目录
代码编写规范 (1)
目录 (1)
一、命名惯例 (3)
1.所有lua文件命名时使用小写字母 (3)
2.类名、变量名等全小写,尽可能使用有意义的英文,单词若生僻,则用_ 分割 (3)
3.文件内局部变量加s_前缀 (3)
4.常量、消息号定义时用大写,单词间_ 分割 (3)
5.枚举值定义时加前缀enum_ (3)
二、文件组织 (3)
1. 文件开头加上此文件的功能、职责的简要描述;每个文件都加module 限定词;导
入的模块都加local 限定词; (3)
2. 所有函数都加如下格式的注释。 (3)
3. 函数与函数间、以及一些定义之间加上空行。 (3)
中文写代码软件
4. 文件内不允许出现全局变量,_G.instance 例外 (3)
5. 函数内的临时变量、文件内的局部函数都加上local 限定词 (3)
6. 常量、消息号、枚举值行末都加上分号。 (3)
7. 函数的行数过长(大于100行)时,尽量拆分为多个子函数;函数中一些晦涩的部
分,一定要加上注释。 (3)
8. 短小的注释使用--;较长的注释使用--[[ ]] (3)
9. assert函数开销不小,请慎用。 (3)
10. Lua类设计时,用元表来实现oop。 (3)
三、分隔和缩进 (8)
1. 使用空行 (8)
2. 使用空格符 (8)
3. 使用换行符 (9)
4. 使用小括号 (9)
5. 使用缩进 (9)
四、代码建议: (10)
1.代码中使用的一些函数尽可能在文件开头或者当前局部环境中加local前缀重新定义下。 (10)
2.不要使用元表来实现继承 (10)
3.高级特性尽可能不用 (10)
4.写代码时尽可能写的简单,考虑性能时先做好推断,看看能提升多少,增加的复杂度以及造成的代码晦涩有多严重,然后再决定如何做 (10)
5.加载的xml数据表,尽可能的做好数据校验,若校验失败,要出发断言,使服务器无法启动;不要等出错时,回过头来检查是数据表问题还是逻辑问题。 (10)
6.出错时,记录好错误日志。 (10)
7.提交代码之前,去掉或者注释掉无关的代码;测试下保证服务器可以正确启动。
10
8.尽量减少表中的成员是另一个表的引用。考虑lua的垃圾收集机制、内存泄露等。10
一、命名惯例
1.所有lua文件命名时使用小写字母
2.类名、变量名等全小写,尽可能使用有意义的英文,单词若生僻,则用 _ 分割3.文件内局部变量加 s_前缀
4.常量、消息号定义时用大写,单词间 _ 分割
5.枚举值定义时加前缀 enum_
二、文件组织
1.文件开头加上此文件的功能、职责的简要描述;每个文件都加module 限定词;导
入的模块都加 local 限定词;
2.所有函数都加如下格式的注释。
例如:
--此函数检测是否可以从A(oldx, oldy)点走到B点(newx, newy)
--@param oldx 当前所在点x
--@param oldy 当前所在点y
--@param newx 目标点x
--@param newy 目标点y
--@return 若可以到达,返回true;否则返回false
function obj:checkbar(oldx, oldy, newx, newy)
end
3.函数与函数间、以及一些定义之间加上空行。
4.文件内不允许出现全局变量,_G.instance 例外
5.函数内的临时变量、文件内的局部函数都加上 local 限定词
6.常量、消息号、枚举值行末都加上分号。
7.函数的行数过长(大于100行)时,尽量拆分为多个子函数;函数中一些晦涩的部
分,一定要加上注释。
8.短小的注释使用 --;较长的注释使用 --[[ ]]
9.assert函数开销不小,请慎用。
10.Lua类设计时,用元表来实现oop。
不要直接增加函数成员,因为直接增加函数成员会导致内存增加并且在jit下执行效率和用元表方式无差异。
--一个典型的类定义如下:
--baseobj.lua
module(..., package.seeall)
--类方法定义
local s_method = {__index = {}} local function init_method(obj) function obj:getname()
return self.name
end
function obj:setname(name)
self.name = name
end
end
init_method(s_method.__index)
-
-创建一个对象
function createobj()
--类数据定义
local obj =
{
name = "testname"
}
--设置元表
obj = setmetatable(obj, s_method) return obj
end
一个典型的两层继承的例子如下:
-
-objbase.lua
--基类定义
module(..., package.seeall)
--扩展方法元表
function expandmethod(obj) function obj:getname()
return self.name
end
function obj:setname(name)
self.name = name
end
end