Function 分解函数的行为叫做什么?

Function 分解函数的行为叫做什么?,function,paradigms,Function,Paradigms,通常,我通过许多专用函数实现类(C#,C++),这些函数除了用于分离关注点和逻辑以实现可读性、可维护性和范围之外,没有其他用途。例如,如果我看到一个100行长的函数,其中有3条注释,将其划分为虚拟的1/3节块,那么对我来说就是3个函数。我把那个大函数分解成3个小函数,原来的函数只调用3个函数 我不知道这个范例的名字。起初我认为可能是函数式编程或模块化编程,但事实似乎并非如此。有人能帮我弄清楚这个范例叫什么吗?此外,我可以读到一篇维基百科文章的链接,其中谈到了这个确切的用例,这将是非常棒的(当然,

通常,我通过许多专用函数实现类(C#,C++),这些函数除了用于分离关注点和逻辑以实现可读性、可维护性和范围之外,没有其他用途。例如,如果我看到一个100行长的函数,其中有3条注释,将其划分为虚拟的1/3节块,那么对我来说就是3个函数。我把那个大函数分解成3个小函数,原来的函数只调用3个函数

我不知道这个范例的名字。起初我认为可能是函数式编程或模块化编程,但事实似乎并非如此。有人能帮我弄清楚这个范例叫什么吗?此外,我可以读到一篇维基百科文章的链接,其中谈到了这个确切的用例,这将是非常棒的(当然,如果你告诉我范例的名称,我可以自己轻松地查找)


提前感谢。

这种做法被称为重构

重构源于因子的数学思想。因此,有效地将方法拆分以获得相同的结果

编辑我从一开始就这样做。我将编写大量代码,看看如何以很小的增量消除重复。这是TDD咒语的一部分

红色。绿色重构以消除重复。

基本上只是“重构”


将大函数分解成小函数通常称为重构,但将小函数组合在一起的行为称为重构


当您的编程语言支持函数作为一级实体时,组合功能尤其强大,这意味着您可以将一个函数作为参数传递给另一个函数,该函数返回一个直到运行时才存在的新函数。

重构是在不改变其行为的情况下改变代码。当您将代码分解成更多的方法时,称为对方法进行重构。当您采用这些方法并将它们的行为放入多个类中(这有助于维护每个对象/类的单一职责)时,称之为对象重构。

实际的重构实践称为从超大方法中的现有代码创建一个新的、较小的方法

例子 原始代码

void printOwing() {
    printBanner();

    //print details
    System.out.println ("name:  " + _name);
    System.out.println ("amount " + getOutstanding());
}
执行提取方法后

void printOwing() {
    printBanner();
    printDetails(getOutstanding());
}

void printDetails (double outstanding) {
    System.out.println ("name:  " + _name);
    System.out.println ("amount " + outstanding);
}
如果您试图从方法中提取的代码甚至不属于该类,那么您可以使用类似的方法

Martin Fowler是业界顶尖的软件工匠之一,他写了一本关于重构概念的好书,你可以找到。这本书将给你一步一步的方法来解决你所需要的大部分重构


此外,为几乎所有内置了一些非常好的重构工具的语言制作了一些非常好的IDE。他们还有一个名为Visual Studio的插件,该插件提供了一些相同的功能和好处。

例如,如果您从一开始就实现一个类,那么它不是重构。我在寻找一个范例,而不是实践。这是我对“遗留”代码必须做的最常见的事情之一。不幸的是,我在Netbeans(7)中找不到内置重构选项,我也不记得它在Eclipse中。在当前IDE中找不到:-(我想要的是能够突出显示一系列行,然后选择“提取函数”,所有输入作为输入参数,所有结果值作为多返回或返回参数对象(取决于语言),而不是数据分割,呃,成员字段更新/副作用。如果我想将一些输入参数和/或返回值移动到“数据分割”中,我可以稍后进行。(是的,感受到对Java作为COBOL的憎恨,以及编写纯函数的文化能力的彻底丧失)