2017-03-03 83 views
-1

假设P1, P2, Q1Q2是谓词。如何以清晰的方式编写此嵌套和多个条件分支?

我拿出同一事物的两个实现:

if (P1(x) ? P2(y) : true) && (Q1(z) ? Q2(w) : true) 
    do-something 

if (P1(x) && Q1(z)) 
    if (P2(y) && Q2(w)) 
     do-something 

if (P1(x) && ! Q1(z)) 
    if (P2(y)) 
     do-something 

if (! P1(x) && Q1(z)) 
    if (Q2(w)) 
     do-something 

if (! P1(x) && ! Q1(z)) 
    do-something 

我喜欢第一个,因为它更简洁。但是我错过了什么?

有没有比上述两种方法做同样的事情?

如果有更多的对谓词R1,同样R2工作P1P2的,是第一种方式好还是最好的方法是什么?

实现P2Q2作为函数总是更好吗?如果它们不作为功能实施呢?

+3

,因为这似乎是一个有关可能问题**功能**代码的排列,它似乎更适合[代码评论](http://codereview.stackexchange.com/) – Claies

回答

2

如果((!P1(X)|| P2(Y))& &(!Q1(Z)|| Q2(W)))做一些

+0

你错过了一个'('。以上是真的**清楚**?这显然是一种主观评估 –

+0

哪一个更清楚? – vadim

+0

@PeterDuniho显然,这是一种非常好的写表达式的方法,因为它清楚地显示了逻辑,等价逻辑使用if/else '也是可以接受的,并且在实践中可能需要某些时间,例如,如果你需要调用'P2',你需要计算'y'。有时候,它可以用于调试目的(更容易在特定情况下设置断点),或者如果表达式很长时使代码更容易阅读 – Phil1970

相关问题