AgentSkillsCN

code-optmize

通过代码优化降低维护成本,重点减少类成员。在代码审查、重构或优化代码时使用。遵循封装复用、内联单次调用方法、移除冗余逻辑等原则。

SKILL.md
--- frontmatter
name: code-optmize
description: 代码优化以减少维护成本,重点减少类成员。在代码审查、重构或优化代码时使用。遵循封装复用、内联单次调用方法、移除冗余逻辑等原则。

代码优化

核心目标

终极目标:减少维护成本

子目标:

  • 减少类成员
  • 每个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 有缓存意义,如字典、集合等需要重复创建的数据结构,应保留)