帮助重构这个C#函数。
帮助重构这个C#函数。
我写了类似下面这样的函数:
bool IsDry(bool isRaining, bool isWithUmbrella) { if (isRaining) { if (isWithUmbrella) return true; else return false; } else return true; }
我需要检查,如果下雨了,那么人们需要携带雨伞以保持干燥(不要笑,这只是一个例子,我们实际的业务规则比这更严肃)。
我该如何重构它,因为现在它看起来笨拙。
谢谢大家的帮助! =)
admin 更改状态以发布 2023年5月24日
看起来你正在尝试执行的业务规则是:
P IMPLIES Q
这在逻辑上等同于:
(NOT P) OR Q
因此,你可以简单地写成:
bool IsDry(bool isRaining, bool isWithUmbrella) { return !isRaining || isWithUmbrella; }
关于(不)负面思考
根据谓词的不同,首先从否定方面考虑可能更简单。
NOT (P IMPLIES Q)
现在我们替换上述公式:
NOT ((NOT P) OR Q)
现在我们可以应用德摩根定律:
P AND (NOT Q)
由于这是否定命题,我们必须否定它才能回到肯定。双重否定可能一开始看起来很令人困惑,但回到这个例子,我们有:
bool IsDry(bool isRaining, bool isWithUmbrella) { bool isWet = (isRaining && !isWithUmbrella); return !isWet; }
额外提示
下面是一些常见的boolean
表达式重写示例:
BEFORE | AFTER ________________________________________|________________________________________ | if (condition == true) ... | if (condition) ... ________________________________________|________________________________________ | if (condition == false) ... | if (!condition) ... ________________________________________|________________________________________ | if (condition) { | return condition; return true; | } else { | return false; | } | ________________________________________|________________________________________ | if (condition1) { | return (condition1 && condition2 if (condition2) { | && condition3); if (condition3) { | return true; | } else { | return false; | } | } else { | return false; | } | } else { | return false; | } | ________________________________________|________________________________________ | return (condition1 && !condition2) || | return condition1 != condition2; (condition2 && !condition1); | // or condition1 ^ condition2;
请注意,在C#中预定义的^
是异或运算符,即使对于整数类型(即它不是一个幂运算符)。预定义的&&
和||
是条件逻辑运算符,可以执行“短路”评估。