选择语句
选择语句用于根据条件决定执行路径,是结构化控制流的核心部分。它不是简单的“分支语法”,而是把业务规则映射为可验证路径的主要工具。
1. if 与 switch 的分工
5.3.1 if else 适合表达区间判断、复合逻辑和互斥条件;5.3.2 switch 适合“同一个离散值驱动多分支”的场景。两者都能完成多路分发,但信息组织方式不同:if 强调布尔条件本身,switch 强调枚举分支覆盖。
2. 可读性比技巧更重要
写选择语句时,优先让读者快速看出“分支依据”和“默认路径”。条件过长时可以先提炼为语义清晰的布尔表达式;switch 中应明确 break 或有意贯穿,并在 default 中给出合理处理路径。这样做能显著降低维护时的误判成本。
3. 与后续章节的关系
这一节是后面循环、跳转和错误处理章节的基础。你可以先掌握分支结构的清晰组织方式,再进入更复杂的控制流组合。
4. 分支覆盖意识
当分支依据来自枚举值或离散状态时,应明确“哪些分支一定会出现,哪些分支是防御性兜底”。switch 的 default 往往承担这个兜底职责,而 if 链则应在最后给出清晰的失败路径。把覆盖关系写完整,后续扩展新状态时更不容易漏分支。
5. 条件判定与副作用分离
条件表达式若包含复杂副作用,会让分支语义变得难以推断。更清晰的写法是先完成状态更新,再用纯判定表达式进入 if 或 switch。这样不仅便于审查,也能减少求值顺序导致的误判。
6. 默认分支的职责边界
switch 的 default 不一定总是“正常路径”,它更常用于兜底处理非法状态、兼容未来扩展值或记录诊断信息。若分支值理论上应被完整覆盖,也建议保留 default,并把它写成显式的防御路径,而不是留空。
7. 结构化分支优先于跳转拼接
当分支逻辑增长时,优先考虑提炼函数或拆分判定层次,而不是让多个分支通过跳转语句交错连接。清晰的选择结构能让“进入条件、执行动作、退出路径”保持局部闭合,后续修改时更不容易引入隐式耦合。
习题
- [2.2] 使用蔡勒公式,实现
day_of_week(int year, int month, int day)函数,返回给定日期是星期几。