我不确定如何搜索这个,所以如果已经回答,请指点我。
我再次遇到一个相当普遍的情况,我不确定最佳实践。考虑一个函数具有三个可能值之一的情况;我们会说它们是“a”、“b”和“c”。
如果我收到“a”或“b”,在某些特定情况下,我有大量的重叠处理要做。但是,如果我收到“c”,我需要做一些完全不同的事情。举例来说,这是微不足道的,但我有一些非常重要的例子。
示例(Python):
def doStuff(self, val):
if val == 'a':
self.counter += 1
print val, "is very good"
self.passing = True
self.doMoreStuff()
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
所以这个想法是,对于“a”或“b”,有一些特定于案例的说明和一些重复的东西,但对于“c”,它是完全不同的。在某些情况下,只留下三个单独的案例并不算太糟糕,尽管它让我干涩的眼睛抽搐着看它。在其他情况下,如果有很多重复的代码,这可能是一个更大的问题。
一种解决方案如下所示:
def doStuff(self, val):
if val == 'a' or val == 'b':
if val == 'a':
self.counter += 1
print val, "is very good"
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
这种双重检查值方法好吗?它也让我干涩的眼睛有点抽搐,但不如重复大量代码。
我想,我真正的问题是在某个地方讨论过这个问题,还是有一个标准的“最佳实践”方法来做到这一点?