当前位置:  开发笔记 > 编程语言 > 正文

你如何缩短这一点,以便action1和action2只在代码中显示一次?

如何解决《你如何缩短这一点,以便action1和action2只在代码中显示一次?》经验,为你挑选了5个好方法。

你可以随时做:

if ((x > 10) ? (y >5) : (z > 2)) action1
else action2

为了完整起见,任何if p then q else r陈述都可以逻辑表达为(!p && r) || q.因此,我们可以将原始声明表达为:

a = x > 10
b = y > 5
c = z > 2
(!a && (!c && action2) || ((!b && action2) || action1))

你可以扩展为:

(!a && !c && action2) || 
(!a &&  c && action1) || 
( a && !b && action2) || 
( a &&  b && action1)

如果你将action1收集到一边,你会得到:

( a &&  b && action1) ||
(!a &&  c && action1) || 

( a && !b && action2) || 
(!a && !c && action2)

它真的扩展到:

( a &&  b &&  c && action1) ||
( a &&  b && !c && action1) ||
(!a &&  b &&  c && action1) || 
(!a && !b &&  c && action1) || 

( a && !b &&  c && action2) || 
( a && !b && !c && action2) || 
(!a &&  b && !c && action2) ||
(!a && !b && !c && action2)

从中我们可以看到我们可以将其简化为:

( a &&  b &&  c && action1) ||
( a &&  b && !c && action1) ||
(!a &&  b &&  c && action1) || 
(!a && !b &&  c && action1) || 
action2

由于导致action2的所有路径都是导致action1的任何路径的否定,我们可以进一步将其减少为:

( a &&  b && action1) ||
(!a &&  c && action1) || 
action2

哪个本身可以简化为:

((( a &&  b &&) || (!a &&  c)) && action1) || 
action2

然后可以写成:

if ((a && b) || (!a && c)) action1
else action2

成为:if((x> 10 && y> 5)||(!(x> 10)&& z> 2))action1 else action2

无论如何,这是我们得到的.



1> Roger Lipsco..:
if (should_do_action1(x(), y, z))
    action1(p1, p2, p3, p4);
else
    action2(p1, p2);



2> Coltin..:
if ((x > 10 && y > 5) || (x <= 10 && z > 2))
   action1(p1, p2, p3, p4);
else
   action2(p1, p2);



3> MSN..:

你可以随时做:

if ((x > 10) ? (y >5) : (z > 2)) action1
else action2

为了完整起见,任何if p then q else r陈述都可以逻辑表达为(!p && r) || q.因此,我们可以将原始声明表达为:

a = x > 10
b = y > 5
c = z > 2
(!a && (!c && action2) || ((!b && action2) || action1))

你可以扩展为:

(!a && !c && action2) || 
(!a &&  c && action1) || 
( a && !b && action2) || 
( a &&  b && action1)

如果你将action1收集到一边,你会得到:

( a &&  b && action1) ||
(!a &&  c && action1) || 

( a && !b && action2) || 
(!a && !c && action2)

它真的扩展到:

( a &&  b &&  c && action1) ||
( a &&  b && !c && action1) ||
(!a &&  b &&  c && action1) || 
(!a && !b &&  c && action1) || 

( a && !b &&  c && action2) || 
( a && !b && !c && action2) || 
(!a &&  b && !c && action2) ||
(!a && !b && !c && action2)

从中我们可以看到我们可以将其简化为:

( a &&  b &&  c && action1) ||
( a &&  b && !c && action1) ||
(!a &&  b &&  c && action1) || 
(!a && !b &&  c && action1) || 
action2

由于导致action2的所有路径都是导致action1的任何路径的否定,我们可以进一步将其减少为:

( a &&  b && action1) ||
(!a &&  c && action1) || 
action2

哪个本身可以简化为:

((( a &&  b &&) || (!a &&  c)) && action1) || 
action2

然后可以写成:

if ((a && b) || (!a && c)) action1
else action2

成为:if((x> 10 && y> 5)||(!(x> 10)&& z> 2))action1 else action2

无论如何,这是我们得到的.



4> Daniel Daran..:
bool condition_satisfied = (x() > 10 ? y > 5 : z > 2);
if (condition_satisfied)
    action1(p1, p2, p3, p4);
else
    action2(p1, p2);

或者,或者Roger Lipscombe 回答的问题.



5> Igor Oks..:

我喜欢原始的,冗长的版本.但前提是它遵循代码所描述的系统内部逻辑.否则,也许它应该是"相反的":

int xRes = x();
if (y > 5) 
{
    if (xRes > 10)
        action1(p1, p2, p3, p4);
    else
        action2(p1, p2);
}
else if (z > 2)
{
    if (xRes > 10)
        action1(p1, p2, p3, p4);
    else
        action2(p1, p2);
}
else
{
    action2(p1, p2);
}

无论如何,如果您对最短的解决方案感兴趣,可以是:

((x>10 && y>5) || (x<=10 && z>2)) ? action1(p1, p2, p3, p4) : action2(p1, p2);

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有