我怎样才能简化这个逻辑

Posted

技术标签:

【中文标题】我怎样才能简化这个逻辑【英文标题】:How can I simplfy this logic 【发布时间】:2011-01-26 06:09:12 【问题描述】:

我在简化这个条件语句逻辑时遇到了麻烦。有没有更活泼的写法?

if(($x || $a) && ($x || $y))

   if($x)
          return true;
   

return false;

【问题讨论】:

【参考方案1】:
if ($x) return true;
return false;

根据你的说法,只有当$x 为真时你才返回真,因此这是你真正需要检查的唯一语句,对吗?变量$a$y 完全不相关。

编辑:与以下内容相同:

return (bool) $x;

【讨论】:

当且仅当$a$y 之一是true 时,他可能想要这样做。 我会使用return (bool) $x; @The machine Charmer:但即使在第一个语句中,如果$x 为真,那么两个语句都会自动变为真。如果$x || $a$x || $y 都为真且$x 为真,则它们之间的&& 使整体陈述也为真。 @Gumbo:那会很好。 :) @fastcodejava:没有人说 $x 是布尔值。【参考方案2】:

如果你只在 $x 为真时返回真,那么剩下的代码就无关紧要了。因此,

return (bool) $x;

编辑:哎呀... bool 是一个演员,而不是一个函数。

【讨论】:

【参考方案3】:

外层if($x || $a) && ($x || $y)的条件等价于$x || ($a && $y)。当我们将其与$x 也必须为true(内部if)的条件结合起来,我们得到($x || ($a && $y)) && $x。这相当于$x && $x || $x && $a && $y,可以简化为$x || $x && $a && $y。在两个 OR 分支中,$x 必须为 true 才能继续。但是如果右分支中的$xtrue,那么整个条件已经是true了。

所以唯一需要为真的变量是$x:

return (bool) $x;

【讨论】:

【参考方案4】:

正如一些人已经说过的,只有 $x 在您的代码中很重要。我想最短的代码是:

return $x

【讨论】:

如果$x 是字符串或数字怎么办?然后它不会返回布尔值 true/false。 你是对的。似乎我们确实需要 if($x) return true;否则返回false,那么。无论如何,当它唯一要做的就是检查 $x 的值时,为什么还要有一个方法呢... 我不知道,这似乎是一个很好的学校作业,谁知道呢。【参考方案5】:
if($x && ($a || $y))
     return true;

return false;

【讨论】:

这在语义上是不一样的。 ($x || $a) && ($x || $y) 相当于 $x || ($a && $y)$x && ($a || $y) 相当于 ($x || $a) && ($x || $y)【参考方案6】:
if(($x && $a && $y)

    return true;

return false;

EDIT : 就是return $x;

【讨论】:

【参考方案7】:

你可以把它写成一行表达式...

return $x;

不管 $a 和 $y,$x 必须为真才能返回真

【讨论】:

【参考方案8】:
   if($x)
          return true;
   

   return false;

?

编辑:

return $x

【讨论】:

以上是关于我怎样才能简化这个逻辑的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能实现这个逻辑 add(1)(2)(1).. upto (n)?

我怎样才能结合这些代码? [关闭]

我怎样才能让innerHtml 只写一次错误?

我怎样才能有效地做到这一点? [关闭]

我怎样才能做一个不同的总和?

我怎样才能解决这个问题? [复制]