[规范] lua编程规范
文章目录前言1.文件结构1.1 文件编码1.2 文件命名使用下划线连接1.3 文件头注释2.参数命名2.1 变量命名3.函数命名3.1 函数命名3.2 模块和类命名3.3 函数注释4.代码编写原则4.1 空格分隔层次 换行分隔无关上下代码逻辑4.2 使用4个空格代替tab缩进5.代码格式6.常见通俗规定7.常见埋坑操作7.1 应当ipair遍历table不能为nil为nil会导致脚本崩溃报错反之用pair可避免7.2 应当ipair遍历arraypair遍历map7.3 cjson解析的null类型会为userdata类型 ,我们需要判断这个值使用cjson.null。7.4 lua if判断只有 nil和false会走判断失败逻辑而0会走判断成功逻辑8. 常用技巧9. lua性能优化10. 格式化工具lualint-luastylualuacheck总结前言1.文件结构1.1 文件编码必须使用UTF-8编码避免使用BOM头bom头 lua解释器可能存在编译问题1.2 文件命名使用下划线连接-- 好的命名示例player_manager.lua config_loader.lua network_utils.lua-- 不好的命名示例PlayerManager.lua-- 避免首字母大写config-loader.lua-- 避免使用连字符1.3 文件头注释--[[ * file: player_manager.lua * brief: 玩家管理器模块 * author: 张三 * version: 1.0.0 * date: 2024-01-15 * copyright: Copyright (c) 2024 公司名称 ]]2.参数命名2.1 变量命名-- 使用蛇形命名法(snake_case)localplayer_health100localis_game_pausedfalselocalmax_inventory_size50-- 常量使用全大写localMAX_PLAYERS4localDEFAULT_CONFIG_PATHconfig/game.cfg3.函数命名3.1 函数命名-- 动词开头描述操作functionget_player_by_id(id)endfunctioncalculate_total_damage()endfunctionis_valid_username(name)end3.2 模块和类命名-- 模块使用蛇形命名localnetwork_manager{}localaudio_system{}-- 类使用帕斯卡命名(PascalCase)但Lua中通常也用蛇形命名localPlayerClass{}PlayerClass.__indexPlayerClassfunctionPlayerClass.new(name)localselfsetmetatable({},PlayerClass)self.namenamereturnselfend3.3 函数注释--[[ * brief: 向背包添加物品 * param: item_id - 物品ID * param: count - 物品数量 * param: source - 物品来源(可选) * return: boolean - 是否添加成功 * return: integer - 实际添加的数量 ]]functionInventory:add_item(item_id,count,source)-- 函数实现returntrue,countend行内注释-- 计算基础伤害localbase_damageattacker.attack-target.defense base_damagemath.max(0,base_damage)-- 确保伤害不为负数块注释--[[ * brief: 向背包添加物品 * param: item_id - 物品ID * param: count - 物品数量 * param: source - 物品来源(可选) * return: boolean - 是否添加成功 * return: integer - 实际添加的数量 ]]4.代码编写原则4.1 空格分隔层次 换行分隔无关上下代码逻辑4.2 使用4个空格代替tab缩进5.代码格式6.常见通俗规定7.常见埋坑操作7.1 应当ipair遍历table不能为nil为nil会导致脚本崩溃报错反之用pair可避免7.2 应当ipair遍历arraypair遍历map7.3 cjson解析的null类型会为userdata类型 ,我们需要判断这个值使用cjson.null。localjsonTabcjson.decode({name:null,url:http://www.ban-ming.com]})print(jsonTab.name)--打印出来是userdataprint(jsonTab.namecjson.null)--打印出来是true7.4 lua if判断只有 nil和false会走判断失败逻辑而0会走判断成功逻辑if0then-- 0 passelifnilthen-- nil not passeliffalsethen-- false not passend8. 常用技巧9. lua性能优化10. 格式化工具lualint-luastylualuacheck总结参考https://wuzhiwei.net/lua_style_guide/https://zhuanlan.zhihu.com/p/26119366https://wuzhiwei.net/lua_performance/代码规范遵循Lua官方代码规范http://lua-users.org/wiki/LuaStyleGuideLint工具https://git.qingteng.cn/agent/titanagent/common/titan_labour-common/-/tree/master/tool/lualint?ref_typeheads格式化工具VS Code插件lua-language-server https://marketplace.visualstudio.com/items?itemNamesumneko.lua
