开发中,大量使用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. kubernetes部署spring cloud注册中心 Eureka

    系统环境 java JDK 1.8 Docker 18.09.6 kubernetes 1.16 创建Eureka Server 1.Maven引入相应的jar 引入 SpringBoot 做基础框架 ...

  2. .net web api 权限验证

    做一个登录权限验证. 开始吧. using System; using System.Collections.Generic; using System.Drawing; using System.D ...

  3. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  4. ETL DAG调度策略

    1.目前etl的fetch task策略是基于任务子孙任务数和任务优先级获得task list 2.然后遍历task list 查看任务是否具备执行条件 集群资源校验(yarn/hdfs)<如果 ...

  5. 两数相加[链表加法] LeetCode.2

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  6. excel隔行选中内容如何操作

    查看log日志是站长经常要做的事,从日志中可以发现很多问题,spider最近有没来爬,爬了哪些url,哪些页面不存在了等等,这些都可以看得到.然后你要根据不同的情况采取相应的措施.ytkah喜欢把这些 ...

  7. nginx 设置反向代理

    一.多个路径指向同一ip的不同服务 参考地址:https://www.cnblogs.com/hanmk/p/9289069.html 编辑nginx.conf配置文件,新增加一个server模块,或 ...

  8. 洛谷 CF997A Convert to Ones

    洛谷 CF997A Convert to Ones 洛谷传送门 题意翻译 给你一个长度为 nn 的01串( n \leq 310^5n*≤3∗105 ),你有两种操作: 1.将一个子串翻转,花费 XX ...

  9. python yield实现协程(生产者-消费者)

    def customer(): r="" while True: n=yield r#,接收生产者的消息,并向消费者发送r print("customer receive ...

  10. GoogleHacking语法篇

    常用GoogleHacking语法: 1.intext:(仅针对Google有效) 把网页中的正文内容中的某个字符作为搜索的条件 2.intitle: 把网页标题中的某个字符作为搜索的条件 3.cac ...