我怎样才能简化这个逻辑
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 才能继续。但是如果右分支中的$x
是true,那么整个条件已经是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
【讨论】:
以上是关于我怎样才能简化这个逻辑的主要内容,如果未能解决你的问题,请参考以下文章