帮助重构这个C#函数。

21 浏览
0 Comments

帮助重构这个C#函数。

我写了类似下面这样的函数:

bool IsDry(bool isRaining, bool isWithUmbrella) {
    if (isRaining) {
        if (isWithUmbrella)
            return true;
        else
            return false;
    }
    else
        return true;
}

我需要检查,如果下雨了,那么人们需要携带雨伞以保持干燥(不要笑,这只是一个例子,我们实际的业务规则比这更严肃)。

我该如何重构它,因为现在它看起来笨拙。

谢谢大家的帮助! =)

admin 更改状态以发布 2023年5月24日
0
0 Comments
bool IsDry(bool isRaining, bool isWithUmbrella) 
{
    return (!isRaining || isWithUmbrella);
}

:这是一个带粗体字的段落,内容为123。

0
0 Comments

看起来你正在尝试执行的业务规则是:

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#中预定义的^异或运算符,即使对于整数类型(即它不是一个幂运算符)。预定义的&&||条件逻辑运算符,可以执行“短路”评估。

另请参见

0