我很想知道你们对此的看法。我听到办公室周围传来一堆答案,我想看看你们是否可能有更好的答案。
问题:
您有两个功能如下:
function one()
{
A();
B();
C();
}
function two()
{
A();
D();
C();
}
如何重写(任何重要的事情,你可以创建类,变量,其他方法,任何东西),以减少代码重复?
每个调用的方法都会更改其他函数需要使用的变量。方法已经定义了A()B()和C()。
答案 0 :(得分:6)
这里没有代码重复。它看起来很好。
答案 1 :(得分:6)
并非所有语言都支持这种方法,传递函数的语法可能会有所不同,但概念可能是:
function one()
{
refactored(B);
}
function two()
{
refactored(D);
}
function refactored(middleMan)
{
A();
middleMan();
C();
}
答案 2 :(得分:2)
每个调用的方法都会更改其他函数需要使用的变量。
我首先要重构整个类以使用适当的OOP。
答案 3 :(得分:1)
有很多方法可以重构该代码;我会使用它取决于具体的应用程序,因为这可能意味着我需要重新考虑更高层次的事情,例如重新定义类,或者最坏的情况下审查整个应用程序设计,因为重复意味着我错过了一些关键的关系。
答案 4 :(得分:1)
如果你的函数one()和two()实际上是三行,我就不会重写任何东西。你可能会失去可读性,并使下一个人更难理解代码。
如果对A()和C()的调用实际上是更大的代码块... - 使用抽象方法X()和具体方法定义基类 函数any() { 一个(); X(); C(); }
答案 5 :(得分:0)
这是一个选项。
function (triggerA, triggerB, triggerC, triggerD)
{
A(triggerA);
B(triggerB);
C(triggerC);
D(triggerD);
}
这样你只需要调用一个函数来完成所有操作,并跳过你不需要/不想做的任何事情。
答案 6 :(得分:0)
如果您有闭包,lambda等可用,您可以写
function one()
{
three(B)
}
function two()
{
three(D);
}
function three(middle)
{
A();
middle();
C();
}
答案 7 :(得分:0)
你可以(但可能不应该)创建一个类A()
是构造函数而C()
是析构函数,并且one()
和two()
分别是调用B()
和D()
的类的方法。
我说你可能不应该因为OOP应该被用来编写有意义的代码,而不是出于模糊的优化原因。
答案 8 :(得分:-1)
在C ++中,如果上下文有意义,通常使用RAII来完成...这种模式通常是A()=某些init函数,C()=一些de-init函数。通常还会有一个与初始化或销毁相关的上下文。
class bar
{
bar() {
A();
}
~bar() {
C();
}
};
void one()
{
bar barvar;
B();
}
void two()
{
bar barvar;
D();
}