我有一个名为myFunction1
的函数,其定义如下:
function myFunction1()
{
if condition1 then
doSomething1();
myFunction1();
else if condition2 then
doSomething2();
myFunction1();
else if condition3 then
doSomething3();
myFunction1();
else throw Exception;
}
现在我想编写第二个函数myFunction2
,除了单个案例外几乎与myFunction1
相同,即
function myFunction2()
{
if condition1 then
doSomething4();
myFunction2();
else if condition2 then
doSomething2();
myFunction2();
else if condition3 then
doSomething3();
myFunction2();
else throw Exception;
}
请注意,它只是与if
不同的第一个myFuction1
。我怎么能写myFuction2
以避免重复代码?
答案 0 :(得分:0)
如果它易于阅读和维护,有一些重复是好的!
答案 1 :(得分:0)
如果它是一种功能语言,那么重构它很容易。只需取出差异并将其作为参数传递:
function myGenericFunction1(theThingToDo)
{
if condition1 then
theThingToDo();
myFunction1();
else if condition2 then
doSomething2();
myFunction1();
else if condition3 then
doSomething3();
myFunction1();
else throw Exception;
}
现在你可以直接使用它:
myGenericFunction1(doSomething1);
myGenericFunction1(doSomething4);
或者使用它来创建两个函数:
function myFunction1 () {
myGenericFunction1(doSomething1);
}
function myFunction2 () {
myGenericFunction1(doSomething4);
}
myFunction1();
myFunction2();
答案 2 :(得分:0)
如果它不是函数式语言,您可以将参数添加到单个方法中:
function myFunction(case)
{
if condition1 then
if case == 1 then
doSomething1();
else
doSomething4();
myFunction(case);
else if condition2 then
doSomething2();
myFunction(case);
else if condition3 then
doSomething3();
myFunction(case);
else throw Exception;
}
或者,根据您的实际情况,将doSomething1 / 4作为函数参数传递可能是有意义的,以避免使用if。当有更多可能性时,这会使代码更简单。