lua编程规范_skybeauty_新浪博客

 lua编程规范beta 1.0(for lua5.1 by jason 2011.7.6)

---------------------------------------------------------------------
  源文件布局规范
---------------------------------------------------------------------

  * 文件以utf-8编码保存。
  * 文件第一行svn prop:-- $Id$。
  * 选择tab进行缩进。
  * 任一行代码长度不超过70列。
  * 用 -- 来注释。
  * 中文注释。避免英文注释。

---------------------------------------------------------------------
  命名规范
---------------------------------------------------------------------

  * 变量:驼峰法,eg: Temp。(这个很痛苦,而且现在不少代码是混了unix风格的)
  * 常量:大写加下划线,eg: KIND_PET_FOOD
  * 函数:和 变量 一致, eg:function SafeImport()
  * 类:小写cls开头的驼峰法, eg: clsChar
  * 模块:小写加下划线, eg: item_factory.lua

---------------------------------------------------------------------
  比较规范
---------------------------------------------------------------------
 
  * nil:a == nil
  * int / str:a == 163 / a == "Wingszero"
  * boolean:if a: / if not a:
  * 杜绝比较不同类型的对象
 
---------------------------------------------------------------------
  module规范
---------------------------------------------------------------------
  *用import.lua的Import方法代替lua本身的module, require机制
  eg: Import("base/util.lua")

---------------------------------------------------------------------
  class规范
---------------------------------------------------------------------

  *clsObject作为所有类的Super
  *子类的__init__需要先调用父类的__init__
  *子类实现自己的destroy,并调用其Super的destroy
  * 避免多继承。

---------------------------------------------------------------------
  table规范
---------------------------------------------------------------------
 
  *善用weak table(比如全局资源) 和手工调用collectgarbage()
  *对table进行迭代时,key和value应根据具体意义命名,而不是简单的k,v
  eg: for CharId, Obj in pairs (CharIdMap) do
  * 区分pairs和ipairs
  * 取table的长度用#,不用table.getn(注:此长度仅是线性数组从索引为1开始的连续长度)
  * table的数据较多时考虑用如下形式增强可读性:
  local a = {
 [1] = 108001,
 [2] = 108002,
 [3] = 108003,
   }
---------------------------------------------------------------------
  异常规范
---------------------------------------------------------------------
  *对关键参数(比如传入的参数)进行assert, 比如是否为nil,数据范围和type
  *用xpcall代替关键函数的直接调用
  *如有必要,关键的步骤和错误需调用log

---------------------------------------------------------------------
  其他建议
---------------------------------------------------------------------
  * 尽量避免magic number
  * 尽量使用 local 变量而非 global 变量
  * 被多次读取的 global 变量,应提取出来放到 local 变量中
  * 避免对内部函数的赋值, eg: a= print
 
  * 用x = x or {}的方式替代if..else
  * 可用print(x == "yes" and "YES!" or x)  的方式替代if..else
  * if..then..return..end 分行写

  *字符串连接:
  连接符".."每次使用都会产生新的字符串,老串会成为垃圾,容易触发gc
  用table.concat连接字符串很快,但加上insert子串的耗时后,经测试甚至比前者慢
  极端情况可以用stack维护多个大子串来改善 --详见《Programming in Lua》P81-82
 

---------------------------------------------------------------------
  充分理解
---------------------------------------------------------------------

  *充分理解metatable及metamethod
  *充分理解rawset,rawget的使用场合
  *充分理解weak table的使用场合
  *充分理解并合理利用clousure
  *充分理解gc的原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值