代码优化
核心目标
终极目标:减少维护成本
子目标:
- •减少类成员
- •每个private成员都被引用至少2次
重要原则
将一个很长的方法拆开并不符合目标。除非这个方法的某些代码片段能够被复用。
优化检查清单
执行代码优化时,按以下清单逐项检查:
通用规则
- • 移除冗余逻辑(未被调用过的逻辑)
- • 封装,复用重复代码片段
- • 仅被引用过一次的方法,应该成为内联实现或者成为闭包方法
- • 事件处理器如果只被订阅一次,应该内联为 lambda 表达式以减少类成员
- • 仅被一个方法调用过多次的方法,应该成为内部方法
- • 高频方法里的内部方法应该尽量用 static
- • 移除所有多余空行
- • 移除所有行内注释(保留文档注释)
- • 旧的文档注释需要检查正确性。不需要增加新的文档注释
- • 检查所有元素(包括但不限于类,字段,属性,方法)命名。如果是局部命名,直接改掉。如果是public元素命名,需要提出更好的命名方案
- • 充分利用最新版本的语言特性去简化代码
C# 特定规则
- • 只读属性如果没有特殊逻辑(如计算、延迟初始化等),应该改为
readonly字段以减少类成员 - • 属性可以改为 field 关键字的要用 field。例如:
- •
[field: MaybeNull] NodeType NodeName => field ??= GetNode<NodeType>("%NodeName") - •
NodeType? NodeName => field ??= GetNodeOrNull<NodeType>("NodeName") - •属性非空,field 可能为空需要增加
[field: MaybeNull]标签 - •field 语法在一些 IDE 里会被误报语法错误,但他是正确的语法
- •
- • C# 的 const 只能用于基本类型,如果只被引用过一次,应该内联到使用处(可以写在方法内部)
- • 跨帧的状态应该封装为 IEnumerator,嵌套 while 表达子状态,用
_process推进 - • 完全信任 nullable 语法警告,不做任何多余的防御代码
- • 优先使用现代 C# 特性简化代码:
- •如果可能,使用主构造函数
(Type param)替代传统构造函数 - •使用集合表达式
= []替代new List<T>() - •如果可能,使用
foreach替代for循环(除非需要索引) - •使用
??=和?.等空值合并操作符
- •如果可能,使用主构造函数
- • 避免过度复杂化:
- •不要添加不必要的中间变量或属性来跟踪状态
- •如果属性本身已经缓存了值,不需要额外的缓存跟踪属性
- •缓存失效逻辑应该尽可能简单直接
- •移除所有未被使用的方法和属性
GDScript 特定规则
- • 仅被引用过一次的 const,应该内联到使用处(例外:如果 const 有缓存意义,如字典、集合等需要重复创建的数据结构,应保留)