lua 代码风格

参考 http://www.kancloud.cn/kancloud/lua_style_guide/66327

1、命名

1、命名法:小驼峰命名法,大驼峰命名法(Pascal命名法),小下划线命名法,大下划线命名法。 采用自己喜欢的和熟悉的,不要混用

2、作用域范围更大的变量名要比作用域小的变量名具有更多的描述信息

3、对于布尔型的变量,通常前缀加上is可以方便理解

4、包名和模块名通常很短,并且全部小写,单词间并没有下划线区分,比如:文件读取库名为lfs,表示 lua file system

5、文件名通常采用小驼峰命名法

2、作用域:

1、对于变量,在一切能使用local修饰的情况下,使用local进行修饰

  2、局部变量的作用域结束,被系统清理

3、注释

1、通常在-- 前加一个空格

2、对于接口注释

-- Delete a session

  -- @param id session identification

4、惯用法(精巧用法)

1、尽可能使用local修饰变量

原因:1、使用local的变量会在作用域结束时释放其内存

2、使用local的变量会比全局变量的存取更快

3、全局变量会污染全局的命名空间

2、直接判断真假值

  -- 不推荐

if obj ~= nil and willbreak == false then -- ... end

-- 推荐

    if obj and not willBreak then -- ... end

原因:lua在逻辑判断时将所有非false 和 非nil的逻辑判断视为真,反之视为假。不需要再与布尔值和nil进行对比。

但是,在需要对false和nil进行区分时,需要写明== : obj==nil 和 obj ==false

3、默认参数的实现

     function setName(name) name = name or "noName" end

  4、一行代码实现表的拷贝

     u = {unpack(t)}   

  5、一行代码判断表是否为空

   用#t==0 并不能判断表是否为空,因为#预算符会忽略所有不连续的数字下标和非数字下标

正确做法: if next(t) == nil then -- 表为空 end 因为表的键可能为false,所以必须与nil比较,而不能直接使用~next(t)来 判断表是否为空

6、更快的插入代码

tabel.insert(t,value) -- 更慢,不推荐

t[#t+1] = value -- 更快,推荐

原因:[]和#避免了高层的函数调用开销