博客
关于我
基于自己项目的 lua 代码规范和一些书写的注意事项总结
阅读量:491 次
发布时间:2019-03-06

本文共 1681 字,大约阅读时间需要 5 分钟。

编程实践:从Data到Logic——代码优化与重构指南

一、逻辑与数据分离的优势

将逻辑与数据分离,使其成为现代程序设计的基础原则。简单理解可以认为,函数(function)即为逻辑,表(table)则为数据。两者的分离不仅能够提升代码的可维护性,还能显著增强代码的可扩展性和复用性。

1.修改数据时逻辑不变之优点

通过建立专门的数据表,将品质与对应的ID映射存储其中。例如,武学的品质映射可以通过填写品质表的替代物品ID字段来实现。这种设计方式让修改数据时专注于数据方便无误地维护,逻辑无需变动,帮助开发者避免因数据修改导致的逻辑错误。

2.避免过度拆分函数

函数的复用性与调用消耗之间存在权衡。对于嵌套调用次数多的逻辑,建议合理控制函数的拆分程度,避免过度层叠。通过将逻辑细节抽象为数据表(如品质表),可以显著减少函数调用层级,提升整体效能。

3.逻辑复用与数据驱动

复杂逻辑可以通过数据的扩展来实现多样化功能。例如,针对不同的掉落类型,可以增加相应的数据项,而无需修改现有逻辑。此外,将触发剧情的条件存储在数据中,使得逻辑变得更加灵活和可控。

4.高效处理大规模数据

将地名存储到全局数据或表中,可以避免每次调用函数时生成新的数据结构,节省内存分配和CPU消耗。例如,高频调用的地名函数优化后,仅需0.07秒完成,而未优化版本在10万次调用下耗时4.2秒。

二、逻辑的清晰性提升

代码的可读性直接影响开发效率和代码质量。通过适当换行、增加注释等方式,可以极大提升逻辑的可读性。

1.增加注释

代码的复杂性决定了注释的必要性。大块注释用于解释复杂逻辑,同步修改注释与代码可维护性更大。

2.避免代码冗余

重复逻辑应通过抽象接口或函数复用机制避免。例如,将通用的逻辑封装为接口,供其他模块反复使用。同时,确保每个逻辑单元(如模块、函数)都有明确的责任,避免因修改需要遍历整个文件造成遗忘。

三、共性与代码精简

在代码中寻找共性(Commonality)是精简代码的关键。任何事物都有其共性,通过提取共性可以将代码量大幅减少并提升复用性。

1.减少重复代码

通过建立数据表(如品质表、物品表),可以将重复的条件判断转化为数据查询,避免冗余逻辑。例如,在处于特定品质等级时触发的逻辑变化,可以通过对应的表存储处理规则实现。

2.避免一次性写成20行代码

代码的复杂性与可读性之间存在着微妙的平衡。一行优化的代码往往能实现多行功能,真正的高手会在保持简洁的同时实现高效。例如,通过数据表替代数组,可以大幅减少条件判断和循环的次数。

四、算法复杂度优化

在算法设计中,优化的重点是减少不必要的操作和降低复杂度。

1.键值对优化

使用哈希表(如Lua中的表)存储键值对,可以将O(n)的数组查询优化为O(1)。例如,在判断玩家是否拥有某个成就时,直接从成就表中查询即可。

2.减少全表遍历

通过将筛选条件提前存储在数据表中,可以减少全表遍历带来的性能损耗。例如,将候选ID存储在筛选表中,再在此表中进行筛选操作。

3.避免递归

递归算法通常在调用栈增加带来性能消耗,应优先考虑迭代替代。例如,求最大公约数的递归可以通过模拟栈结构的迭代实现。

4.应对NP问题

NP问题的复杂度无法预估,因此应避免直接实现。这需要在需求分析阶段就识别出来,并通过成熟的算法或优化手段找到可行解决方案。

五、命名规范化与函数优化

函数命名应遵循直观性和可读性原则,避免拼音混淆。

1.命名规则

函数命名应使用英文单词或短语,保持清晰易懂。例如,将过长难懂的汉语拼音命名替换为英文描述。

2.函数设计注意事项

低层函数应具备高效率,合理控制函数复用与拆分,避免过度的层次嵌套调用带来的性能损耗。

六、编程技巧与反思

在实践中,提前建立合理的数据结构和接口能够事半功倍。同时,定期进行代码审查和反思,及时发现和纠正潜在问题。

通过以上方法,可以显著提升代码的可读性、性能和维护性。如果有任何代码实现需要改进,记得深入分析是否存在规律性的共性,是否可以通过数据的扩展实现功能的扩展而无需修改逻辑。

转载地址:http://btjdz.baihongyu.com/

你可能感兴趣的文章
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
Netty WebSocket客户端
查看>>
netty 主要组件+黏包半包+rpc框架+源码透析
查看>>
Netty 异步任务调度与异步线程池
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
Netty事件注册机制深入解析
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty客户端断线重连实现及问题思考
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>
Netty工作笔记0007---NIO的三大核心组件关系
查看>>
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>