# 防御性编程（Defensive Programming）

### 缩写：无

### 简述

假设周围代码与输入可能违背约定，从而增加检查、默认安全行为与降级的实践取向。适度防御提高稳健；过度防御掩盖设计错误并增加噪音。

### 使用场景

公共库边界、不安全输入、遗留协作面。

### 实践与应用

• 在边界防御，在内聚模块可契约编程
• 失败要可观测
• 与断言/类型配合

### 注意事项

• 处处防御导致无法暴露 bug
• 静默修复坏数据

### 对比与易混

| | 防御 | 契约 |
|--|------|------|
| 假设 | 对方可能违约 | 对方应守约 |
| 适用 | 边界、不可信输入 | 内聚模块内部 |

### 关联术语

• 校验：边界上的具体检查
• 契约式设计：假设对方守约的对照取向
• 错误处理：违约时的应对
• 断言：内部不变量的检查
