用途
「可预测性」(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 契约不变。
此外,现有资料未提供该技能的收费、价格、支持平台、实际效果数据或具体使用步骤,这些信息暂未提供。