用途
Fail Fast 是一套面向错误处理的编码技能,用于指导开发者何时以及如何让程序在出错时立即、显式地失败。它的核心场景包括:编写错误处理代码、想要捕获并吞掉异常、以及想通过返回默认值来掩盖失败。技能的目标是避免隐藏错误、避免无效状态传播,让失败发生在出错点,而不是在几层之后以损坏数据的形式出现。
主要能力
该技能提供了一套完整的错误处理原则与操作指南:
- 核心铁律:绝不隐藏失败,要大声失败、尽早失败。明确排除“应用不应崩溃”“返回点什么而不是抛出”“优雅处理错误”“防御式编程”等借口。
- 检测“吞掉异常”坏味道:识别静默消失的错误,例如在 catch 中返回
{ success: false, error: 'Internal error' }这类做法,并指出其问题:调用方不知道具体哪里失败、堆栈跟踪丢失、bug 被伪装成“内部错误”、对真实失败缺乏可见性。 - 正确的失败模式:在失败点抛出异常,让错误向上传播。示例中展示了在输入校验阶段就抛出
ValidationError,在用户不存在时抛出NotFoundError,在卡片校验失败时抛出PaymentError,并让调用方在边界处按错误类型返回合适的 HTTP 状态码。 - Fail-Slow 的危险性:以表格形式列出隐藏 bug、丢失上下文、状态损坏、调试噩梦、静默数据丢失等问题及其影响。
- Fail Fast 技巧:包括尽早验证输入、断言不变量(前置条件与后置条件)、利用类型系统让编译器捕获空值问题。
- 压力抵抗协议:针对“应用不应崩溃”“返回而不是抛出”“优雅处理错误”“防御式编程”四种常见压力,给出回应与行动建议。
- 红旗信号清单:列出需要立即重构的模式,如
catch (e) { return null; }、catch (e) { return { success: false }; }、静默提前返回、空 catch、返回默认值、泛化的“内部错误”、记录错误后继续执行等。 - 快速参考对照表:对比 Fail Slow(坏)与 Fail Fast(好)的写法,例如
catch (e) { return null }对比catch (e) { throw e },if (!user) return对比if (!user) throw new NotFoundError()。 - 常见合理化借口及反驳:逐条列出“应用不应崩溃”“返回而不是抛出”“优雅错误处理”“防御式编程”“绝不让函数崩溃”“用户体验”等借口,并说明其为何无效。
使用方式
该技能以原则和代码示例的形式呈现,开发者可在编写或审查错误处理代码时对照使用。资料中未提供具体的安装命令或集成步骤。
适用场景
适用于需要编写错误处理逻辑、审查异常捕获代码、设计 API 错误响应、以及希望避免静默失败和状态损坏的软件开发场景。
限制
资料中未提供关于该技能的具体平台支持、收费方式、价格或效果保证等信息。