Lua代码编写注意点
2016-05-12 12:04
218 查看
1. 发现Lua的东西都是“浅拷贝”, 没有传址, 引用,深拷贝等, 这对一些精良的设计造成难度。
2. Lua变量无类型配对,但调用Lua的系统却有类型配对,这两者的矛盾导致交互设计的成本。
3. 为了代码的高度复用需要把相关的类型抽象出来,但Lua的代码检测能力较宽松,即使参数配错了(不同的类系)依然可以进行, 这对实现者造成了数据流控制和纠错的成本,这对用户造成了使用的成本。
例如我留出了一个虚函数接口, 但是由于Lua无类型声明的风格, 如果我是一个用户,我将对接口参数是什么东西完全无法理解,乱写也不会报错, 只有运行时才能知道出错。然后我得去阅读复用代码的源码才知怎么用。
4. Lua函数的返回值不用声明, 导致需要阅读函数内部实现,才能知晓如何用。
解决方案:通过命名规则来强化代码可读性和维护性。
接口命名规则:
返回值类型需全部小写直到有大写字母的单词,有大写字母的单词为函数名,参数用小写, 函数参数全部要用_起头, 类型要小写。
xxx_yyy_zzz_D()
xxx_yyy_zzz_dD()
xxx_yyy_zzz_Dd()
deleteMap(_mapObj) -- 删除地图_mapObj, 参数为_mapObj
nil_deleteMap(_mapObj) -- 删除地图_mapObj并返回nil, 参数为_mapObj
str_id_getMapName(_mapObj) -- 返回地图_mapObj的名字和ID, 参数为_mapObj
str_Num(_dNum) -- 返回把数字转为字符后的结果, 参数为_dNum
1. 常量全部大写。
2. 对象命名: 类型(小写)对象作用。
例如:
_dStep -- 数字类型的步长
_funAddCount() -- 函数类型的积加函数
//--------------------------------------------------------------------------------------------------------------------------
在Lua里要慎用“:”的调用方式, 因为这样会造成对函数调用不通用, 特别是当要把类的函数当变量传递时,会有问题, 因为接受者不晓得接受到的这个函数变量要用“:”使用还是用“.”使用。
可以采用以下这种方式替换:
function fun_newMyClass
local t = { ID = 123}
function t.funTestA()
print(t.ID, "get something")
end
return t
end
2. Lua变量无类型配对,但调用Lua的系统却有类型配对,这两者的矛盾导致交互设计的成本。
3. 为了代码的高度复用需要把相关的类型抽象出来,但Lua的代码检测能力较宽松,即使参数配错了(不同的类系)依然可以进行, 这对实现者造成了数据流控制和纠错的成本,这对用户造成了使用的成本。
例如我留出了一个虚函数接口, 但是由于Lua无类型声明的风格, 如果我是一个用户,我将对接口参数是什么东西完全无法理解,乱写也不会报错, 只有运行时才能知道出错。然后我得去阅读复用代码的源码才知怎么用。
4. Lua函数的返回值不用声明, 导致需要阅读函数内部实现,才能知晓如何用。
解决方案:通过命名规则来强化代码可读性和维护性。
接口命名规则:
返回值类型需全部小写直到有大写字母的单词,有大写字母的单词为函数名,参数用小写, 函数参数全部要用_起头, 类型要小写。
xxx_yyy_zzz_D()
xxx_yyy_zzz_dD()
xxx_yyy_zzz_Dd()
deleteMap(_mapObj) -- 删除地图_mapObj, 参数为_mapObj
nil_deleteMap(_mapObj) -- 删除地图_mapObj并返回nil, 参数为_mapObj
str_id_getMapName(_mapObj) -- 返回地图_mapObj的名字和ID, 参数为_mapObj
str_Num(_dNum) -- 返回把数字转为字符后的结果, 参数为_dNum
1. 常量全部大写。
2. 对象命名: 类型(小写)对象作用。
例如:
_dStep -- 数字类型的步长
_funAddCount() -- 函数类型的积加函数
//--------------------------------------------------------------------------------------------------------------------------
在Lua里要慎用“:”的调用方式, 因为这样会造成对函数调用不通用, 特别是当要把类的函数当变量传递时,会有问题, 因为接受者不晓得接受到的这个函数变量要用“:”使用还是用“.”使用。
可以采用以下这种方式替换:
function fun_newMyClass
local t = { ID = 123}
function t.funTestA()
print(t.ID, "get something")
end
return t
end
相关文章推荐
- Lua: 好的, 坏的, 和坑爹的
- lua面向对象封装及元表(metatable)性能测试 - three_bird的博客 - 博客频道 - CSDN.NET
- Lua中的ipair 和 pair的区别
- 第一个c++调用Lua程序
- 【Lua】windows下安装和使用LuaJIT步骤
- Lua:安装使用Lua扩展库LuaSocket
- C++混合编程之idlcpp教程Lua篇(8)
- leetcode.150. Evaluate Reverse Polish Notation
- Lua 垃圾收集机制
- 2dx-lua quick打包去掉蓝色启动页
- 150. Evaluate Reverse Polish Notation
- 2dx-lua精灵置灰
- [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
- Lua和C++交互详细总结
- lua之alter提示框
- 实现c++,java,lua 在c++编写后需要在 pkg 文件中添加新的函数 然后批处理下生成GamePlatformToLua
- 在实现安卓和ios的sdk中 c++,java,lua 混编学习记录
- LuaDoc 3.0.1 Lua源代码文档生成工具(转)
- lua 随机数
- 基于ngx_lua_waf模块配置web应用防火墙