If statement 将案例选择与处理分离
我正在处理数据,有许多案例需要处理。选择正确的案例有一定的复杂性,一旦找到正确的案例,处理过程也会很复杂 我可以用两种不同的方法来解决这个问题:If statement 将案例选择与处理分离,if-statement,design-patterns,optimization,switch-statement,If Statement,Design Patterns,Optimization,Switch Statement,我正在处理数据,有许多案例需要处理。选择正确的案例有一定的复杂性,一旦找到正确的案例,处理过程也会很复杂 我可以用两种不同的方法来解决这个问题: (A) 方法选择正确的进程并调用它 (B) 方法执行选择,将代码返回给控制该过程的另一个方法 (A) 这是我的第一个选择,但是(B)的优点是将选择过程解耦,使其更清晰,并将其与处理过程分离 在伪代码中: ====== option A ====== function doEverything(data) { if (case1(data))
- (A) 方法选择正确的进程并调用它
- (B) 方法执行选择,将代码返回给控制该过程的另一个方法
====== option A ======
function doEverything(data) {
if (case1(data))
return doCase1(data)
else {
doStuff(data) // applies to all cases except case1
if (case2(data)) {
doStuff2()
return doCase2(data)
}
else if (case3(data)) {
return doCase3(data)
}
else return doDefaultCase(data)
}
return result
}
或者:
====== option B ======
function doChoice(data) {
if (case1(data)) return 1
doStuff(data) // applies to all except case1
if (case2(data)) return 2
if (case3(data)) return 3
return 4 // default
}
function doProcess(data) {
which = choice(data)
switch (which) {
case 1:
return doCase1(data)
break
case 2:
doStuff2()
return doCase2(data)
break
case 3:
return doCase3(data)
break
case 4:
return doDefaultCase(data)
default:
raise an error
}
我的问题是:有没有适用于这种情况的标准实践?我最近有一个类似的问题:我想动态地匹配一个类型的层次结构,然后在匹配时执行特定的操作
而不是使用包含if/else构造的方法,该构造封装了匹配规则。您甚至可以更进一步,将匹配方法与其行为解耦,即将其泛化为匹配规则,并将其检索为方法参数
如果将匹配的规则/条件封装在如下所示的层次结构中,这是可能的。稍后,您可以使用此层次结构进行匹配,并根据匹配的类型使用操作
为了匹配类型层次结构(本质上是一个节点树),请看下面的内容