假设我们有一个像
这样的表达式 (Rule1 && Rule2 && Rule3)
Rule1
,Rule2
和Rule3
是REST
次调用,返回true或false。
我想根据表达式优化REST调用。 在引用的示例中,如果规则中断,则无需评估其他规则。
如果是(Rule1 ||Rule2 || Rule3)
我想立即解雇所有人,或者试图让第一个真实,然后忽略其他人。
这是编译器评估布尔表达式的方式。如果我必须用Java或任何现代编程语言实现它,我们是否有任何标准算法
答案 0 :(得分:1)
大多数现代语言支持short-circuit evaluation,仅在第一个参数不确定整个表达式时才评估第二个参数。因此,在(Rule1 && Rule2 && Rule3)
中,如果Rule1为false,则不会评估Rule2。同样在(Rule1 ||Rule2 || Rule3)
如果Rule1为真,则不会评估Rule2。
确定"第一个参数"的惯例是从左到右。这是因为大多数现代编程语言仍然遵循西方的写作规则。所以"算法"减少浪费的周期是:
我们如何确定哪个参数最有可能是假的?根据我们对系统的信息,运用我们的技能和判断力。或者猜测我们是否没有足够的信息。这可能是一个容易premature optimization的区域。
最后,要解决这个问题:
如果有一个复杂的表达式,如
(Rule1 && (Rule2 || Rule3))&&Rule4
,这里我先评估Rule4
您需要将表达式写为
(Rule4 && Rule1 && (Rule2 || Rule3))