SuperAPI AI 工具集

predictability

前端与建站

查看项目

更新于 10-16 04:42

技能介绍

用途

「可预测性」(Predictability)是 Toss 前端基础(frontend-fundamentals)中关于代码质量的一条原则,用于指导前端代码的命名与函数设计。其核心主张是:函数应当按名称所暗示的方式运作,不应存在隐藏行为。当代码中出现「名不副实」的函数时,阅读者需要跳进实现细节才能理解其真实行为,从而增加理解成本与出错风险。

该技能适用于以下触发场景:

  • getX() 或 fetchX() 中藏有副作用;
  • 同一类函数之间返回类型不一致;
  • 函数名称与实际行为不符。

主要能力

1. 揭示隐藏逻辑

文档指出,fetch 函数中不应夹带副作用。反例中,fetchBalance() 在返回余额的同时调用了 logging.log("balance_fetched"),这属于隐藏的副作用。改进方式是把副作用移到调用处显式执行:fetchBalance() 只负责请求并返回数据,日志上报由调用方在拿到结果后自行完成。

2. 统一返回类型

文档指出,同一类函数应保持一致的返回类型。反例中,checkIsNameValid() 返回 boolean,而 checkIsAgeValid() 返回对象 { ok: false, reason: "18세 이상" } 或 { ok: true },两者语义相同却形态不同。改进方式是定义可辨识联合类型:

type ValidationResult = { ok: true } | { ok: false; reason: string };

并让两个校验函数都返回 ValidationResult,从而让调用方以统一方式处理结果。

3. 快速参考表

文档提供了一张「代码坏味道 → 改进方法」的对照表:

  • getX() 带副作用 → 分离纯 getter 与 action;
  • calculateX() 内部执行了保存 → 改名为 calculateAndSaveX() 或拆分;
  • 同类函数返回类型不同 → 使用可辨识联合 { ok: true } | { ok: false; reason };
  • 命名与库名重叠 → 使用可区分的名称,例如 http → httpService。

使用方式

该技能以编码规范的形式使用:在编写或审查前端函数时,对照上述模式检查命名与行为是否一致。文档中的示例以 TypeScript 呈现,包含 async/await、类型注解与联合类型等语法。具体安装命令、集成方式与工具链配置在现有资料中暂未提供。

适用场景

  • 前端项目中函数命名与行为审查;
  • 代码评审时识别隐藏副作用与不一致的返回类型;
  • 设计校验类、请求类工具函数时统一接口形态;
  • 处理与第三方库同名的模块命名冲突。

限制与注意事项

文档明确给出以下注意点:

  • 不要直接删除副作用,而应将其移动到显式位置;
  • 避免使用过于复杂的类型;
  • 保持既有 API 契约不变。

此外,现有资料未提供该技能的收费、价格、支持平台、实际效果数据或具体使用步骤,这些信息暂未提供。