什么是 when 和 otherwise?
when 和 otherwise 是编程和规则系统中常见的关键词,用于构建多分支条件逻辑。
它们通常成对出现,when 用于定义多个匹配条件,而 otherwise 则作为“默认情况”处理未匹配的情形。
提示:虽然不同语言语法略有差异,但核心思想一致:提供清晰、可读的条件分支结构。
Kotlin 中的 when 表达式(含 else)
在 Kotlin 中,when 替代了传统的 switch 语句。它没有 otherwise 关键字,
而是使用 else 作为默认分支,功能上等同于 otherwise。
val score = 85
val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
else -> "D" // 相当于 otherwise
}
println(grade) // 输出: B
SQL 中的 CASE WHEN ... ELSE
在 SQL 查询中,CASE WHEN 结构常用于条件判断,其 ELSE 子句即为 otherwise 的体现。
SELECT
name,
CASE
WHEN age < 18 THEN '未成年'
WHEN age BETWEEN 18 AND 60 THEN '成年人'
ELSE '老年人' -- 相当于 otherwise
END AS category
FROM users;
规则引擎中的 when/otherwise
在 Drools 等业务规则引擎中,when 定义触发条件,而规则动作中可通过逻辑实现“否则”行为。
虽然不直接使用 otherwise,但可通过互补规则模拟该逻辑。
// Drools DRL 示例(简化)
rule "Check VIP Status"
when
$c: Customer( totalSpent > 10000 )
then
$c.setVip(true);
end
rule "Default Non-VIP"
when
$c: Customer( totalSpent <= 10000 )
then
$c.setVip(false); // 模拟 otherwise 行为
end
最佳实践建议
- 始终包含默认分支(
else或otherwise),避免未处理情况。 - 保持条件互斥且覆盖全面,提升代码健壮性。
- 在业务规则系统中,优先使用显式规则而非隐式“否则”逻辑,以增强可维护性。