ADa*_*Man 5 conditional-statements
是否有一种设计模式、方法或语言可以让您编写超越嵌套 If 的复杂条件逻辑?
至少,这种问题有名字吗?我无法在这里或通过 Google 找到任何描述我试图解决的问题,而不仅仅是用 Switch 语句替换 IF 。
我正在使用脚本来生成一堆数据。作为其中的一部分,我想添加大量分支条件逻辑,这些逻辑应该提供多样性并阻止某些组合。
例如,如果用户是 A 组的一部分,那么他们就不能是 B 组的一部分,如果他们具有属性 C,那么这会将他们限制为特征 5 或 6,但不能低于或高于该特征。
答案很简单:重构。
我们举个例子(伪代码):
if (a) {
if (b) {
if (c) {
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以替换为:
if (a && b && c) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
现在,假设a,b和c是复杂的谓词,这使得代码难以阅读,例如:
if (visitorIsInActiveTestCell(visitor) &&
!specialOptOutConditionsApply(request, visitor) &&
whatEverWeWantToCheckHere(bla, blabla)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
我们也可以重构它并创建一个新方法:
def shouldDoSomething(request, visitor, bla, blabla) {
return visitorIsInActiveTestCell(visitor) &&
!specialOptOutConditionsApply(request, visitor) &&
whatEverWeWantToCheckHere(bla, blabla)
}
Run Code Online (Sandbox Code Playgroud)
现在我们的if条件不再嵌套,变得更容易阅读和理解:
if (shouldDoSomething(request, visitor, bla, blabla)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
有时提取这样的逻辑和重构并不简单,可能需要花一些时间思考,但我还没有遇到不可能的例子。
| 归档时间: |
|
| 查看次数: |
11758 次 |
| 最近记录: |