开发中,大量使用lua,暂时根据当前状况,总结相对而言较好的规范,在多人协作中可以更好的开发、交流。
 
介绍 

该文档旨在为使用lua编写应用程序建立编码指南。 
制订编码规范的目的:

  • 统一编码标准,通用,提高开发效率;
  • 使代码通俗易懂,易于维护。

切记:善用调试器。

一、 命名惯例 

1.所有lua文件命名时使用小写字母、下划线

2.类名、变量名尽可能使用有意义的英文,类名使用帕斯卡命名法,变量名使用骆驼式命名法

3.常量、消息号定义时用大写,单词间 _ 分割  eg:KIND_PET_FOOD

4.枚举值定义时 加前缀 enum_

5. 函数名使用骆驼式命名法

注:

骆驼式命名法:第一个单字以小写字母开始;第二个单字的首字母大写或每一个单字的首字母都采用大写字母

帕斯卡命名法:和骆驼命名法很像,只有一点区别,就是首字母要大写。(单字之间不以空格断开或连接号)

二、 文件组织 

1. 文件开头加上此文件的功能、职责的简要描述;

如下:

  -- Author: Feng

  -- Date: XXXX-XX-XX

  -- 功能描述

每个文件都加module 限定词; 导入的模块都加 local 限定词;或者使用(module(..., package.seeall)),这样便于进行热更新

2. 所有提供外部函数都加如下格式的注释。

例如:

--此函数检测是否可以从A(oldx, oldy)点走到B点(newx, newy)

--@param oldx 当前所在点x

--@param oldy 当前所在点y

--@param newx 目标点x

--@param newy 目标点y

--@return 若可以到达,返回true;否则返回false

function Object:checkBar(oldx, oldy, newx, newy)

end

3. 函数与函数间、以及一些定义之间加上空行。

4. 函数内的临时变量、文件内的局部函数都加上 local 限定词

5. 函数的行数过长(大于100行)时,尽量拆分为多个子函数;函数中一些晦涩的部分,一定要加上注释。

6. 短小的注释使用 --; 较长的注释使用 --[[ ]]

7. assert函数开销不小,请慎用。

8. Lua类设计时,用元表来实现oop。

不要直接增加函数成员,因为直接增加函数成员会导致内存增加并且在jit下执行效率和用元表方式无差异。

9. 文件使用UTF8格式

三、 分隔和缩进

1. 使用空行

在下述情况下使用单行的空白行来分隔:

1)在方法之间

2)在方法内部代码的逻辑段落小节之间

3)在注释行之前

注释之前增加一行或者多行空行。

2. 使用空格符

除正常的成分之间以空格符分隔名(如数据类型和变量名之间),在下述情况下也应使用一个空格符来分隔:

1)运算符和运算符之间,如: c = a + b;

2)在参数列表中的逗号后面,如:

function m1(year, month)

end

3) 在for语句时,如:

for k, v in pairs(t) do

end

4)在下列情况下不要使用空格。

例如:

函数定义时:

function test1(a)

end

不要这样:

function test1( a )

end

函数调用时:

test1(3)

不要这样:

test1( 3 )

不要如此的原因在于:

a).容易忘记相关空格,导致风格不统一,这样还不如不加;

b).lua解析语法时是采用空格等分割来解析的,某些情况下,若不小心加空格会导致非预期的结果。

3. 使用换行符

不建议在一行中写多条语句,一条语句的长度一般超过了80个字符时,应该换行

4. 使用小括号

可以使用小括号来强行规定运算顺序

5. 使用缩进

在下述情况下应用缩进

1)类中的成分

2)方法体或语句块中的成分

3)换行时的非起始行

缩减量一般为在上一级成分的基础上跑到下一个制表位

四、 代码建议:

1. 代码中使用的一些函数尽可能在文件开头或者当前局部环境中加local前缀重新定义下。

例如:

local assert = assert

2.  尽量减少表中的成员是另一个表的引用。 考虑lua的垃圾收集机制、内存泄露等。

3. 高级特性尽可能不用

4. 写代码时尽可能写的简单,考虑性能时先做好推断,看看能提升多少,增加的复杂度以及造成的代码晦涩有多严重,然后再决定如何做

5. 加载的xml数据表,尽可能的做好数据校验,若校验失败,要出发断言,使服务器无法启动;不要等出错时,回过头来检查是数据表问题还是逻辑问题。

6. 出错时,记录好错误日志。

有的函数开销比较大,而调用的频率很低,那么可以不对他做优化;

反之,有的函数开销较小,但是调用的频率很高,从如何降低调用频率以及减少函数开销两个角度去思考,然后定下优化方案

提交代码之前,去掉或者注释掉无关的代码; 测试下保证服务器可以正确启动。
---------------------
版权声明:本文为CSDN博主「热血枫叶」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rexuefengye/article/details/47029339

Lua代码编写规范的更多相关文章

  1. .NET代码编写规范 整理

    .NET代码编写规范 整理 .NET代码编写规范 - [ASP.NET] 2009-02-26 | Tag: 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://lensp ...

  2. 代码编写规范说明书(c#.net与asp.net)

    代码编写规范说明书(c#.net与asp.net) 目 录1 目的2 范围3 注释规范3.1 概述3.2 自建代码文件注释3.3 模块(类)注释3.4 类属性注释3.5 方法注释3.6 代码间注释4 ...

  3. Python代码编写规范

    Python代码编写规范 编码: a)     如无特殊情况,文件一律使用UTF-8编码 b)     如无需特殊情况,文件头部必须加入#-*-coding:utf-8-*- 缩进 a)     统一 ...

  4. Java学习---Java代码编写规范

    编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...

  5. PHP|PHP之代码编写规范

    PHP之代码编写规范 一.编辑器设置 1.使用Tab缩进(四个空格),不要直接使用空格 2.文件编码格式 二.命名设置 1.公共库名称空间 2.变量命名 2.1.所有字母都使用小写 2.2.首字母根据 ...

  6. Java代码编写规范(转载)

    编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...

  7. Java代码编写规范(不是标准规范,自行整理,无须纠结)

    最近回过头来给以前的项目增加功能,发现之前写的注释非常不全,代码也非常的不整洁,有些地方写的''窝七八烂的,看着很不舒服:又恰好经理最近也经常跟我提起代码规范,我们就讨论了一下代码规范的重要性和必要性 ...

  8. php 代码编写规范

    1 编写目的为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范.开发团队根据自己的实际情况,可以对本规范进行补充或裁减. 2 整体要 ...

  9. 代码编写规范Asp.Net(c#)

    1        目的 为了统一公司软件开发的设计过程中关于代码编写时的编写规范和具体开发工作时的编程规范,保证代码的一致性,便于交流和维护,特制定此规范. 2        范围 本规范适用于开发组 ...

随机推荐

  1. FPM十:FORM Repeater

    1.创建feeder class:ZCL_FPM_FORM_REP_DEMO 添加接口类: 2.新建全局内表: DATA:GT_QPGT TYPE TABLE OF QPGT. 3.实列化get_da ...

  2. 剑指:求1+2+…+n

    题目描述 求 1+2+…+n,要求不能使用 乘除法.for.while.if.else.switch.case 等关键字及条件判断语句 A?B:C. 样例 输入:10 输出:55 解法 前面的和+后一 ...

  3. 网商微信实名认证FAQ

    一.商户实名认证简介 基于监管政策.系统风控.用户体验等方面的考虑,我们需要加强对从业机构特约商户的风险管理,升级对商户客户身份识别的认证标准.因此,新入驻的从业机构特约商户要陆续按照新标准完成商户实 ...

  4. Shell 编程 正则表达式

    本篇主要写一些shell脚本正则表达式的使用基础. 概述 正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression) ...

  5. 【转】Linux内存管理(最透彻的一篇)

    摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在 ...

  6. 201871010107-公海瑜《面向对象程序设计(Java)》第四周学习总结

       201871010107-公海瑜<面向对象程序设计(Java)>第四周学习总结          项目                                         ...

  7. vs2008 vc90.pdb 不是创建此预编译头时使用的 pdb 文件,请重新创建预编译头

    解决方案: 找到项目中的stdafx.cpp,右键属性,找到C/C++->预编译头, 设置为创建预编译头, 重新生成

  8. python相关资源

    http://blog.csdn.net/ken_wanglin/article/details/53095967 http://www.infoq.com/cn/articles/Python-wr ...

  9. Jenkins集成allure测试报告

    前言 Allure框架是一个功能强大的自动化测试报告工具,不仅支持多种编程语言,而且能够完美的与各种集成工具结合,包括Jenkins,TeamCity,Bamboo,Maven等等,因此受到了很多测试 ...

  10. JLOI 2009 二叉树问题

    洛谷 P3884 [JLOI2009]二叉树问题 洛谷传送门 JDOJ 2024: [JLOI2009]二叉树问题 JDOJ传送门 Description 如下图所示的一棵二叉树的深度.宽度及结点间距 ...