代码之家  ›  专栏  ›  技术社区  ›  Iain Holder

在C(或任何语言)中,你最喜欢的消除重复的方法是什么?

  •  4
  • Iain Holder  · 技术社区  · 16 年前

    我刚写了700行的课。可怕的。我羞愧地垂着头。与 DRY 英国的夏天。

    它充满了剪贴和小调整这里和那里。这使得它成为重构的首选。在我开始这项工作之前,我想我会问一下,当你有很多重复的时候,你首先寻找的重构机会是什么?

    作为记录,我可能在使用:

    1. 泛型类和方法
    2. 方法重载/链接。

    7 回复  |  直到 11 年前
        1
  •  4
  •   airportyh    16 年前

    我喜欢在需要的时候开始重构,而不是第一次有机会。你可能会说这是一种敏捷的重构方法。我什么时候觉得需要?通常当我觉得我的代码中丑陋的部分开始传播的时候。我认为只要能控制住丑陋是可以的,但是当它们开始有传播的冲动时,那就是你需要处理好生意的时候。

    用于重构的技术应该从最简单的开始。我强烈推荐马丁·福勒的书。将常用代码组合成函数、删除不需要的变量以及其他简单的技术可以让您获得很多好处。对于列表操作,我更喜欢使用函数式编程习惯用法。在python中,我可以说,在python中,可以使用很多的自映射(self-filter),并且可以使用很多内部代码。

        2
  •  2
  •   FlySwat    16 年前

    #地区

    认真地说,避免重复的最好方法是列表中包含的内容,以及充分利用多态性,检查类并发现在基类中最好做什么,以及如何将不同的组件拆分成子类。

        3
  •  2
  •   Jon Limjap    16 年前

    很多时候,我会看到重复的代码(我正在维护的一些遗留应用程序)不是作为完整的方法,而是在完全独立的方法中的块。这提供了一个将这些块转化为方法的绝佳机会。

    怪物类也倾向于揭示它们包含不止一个功能。这反过来又成为了一个将每个不同的功能划分为自己(希望更小)的类的机会。

        4
  •  1
  •   Mike Stone    16 年前

    首先,我建议重构比完成类的第一个版本要快得多。任何时候你看到重复,尽快消除它。一开始这可能需要更长的时间,但我认为最终的结果会更干净,并且它可以帮助您重新思考代码,以确保您做的事情是正确的。

        5
  •  1
  •   Nick Randell    16 年前

    我所做的一件事,就是尝试创建一些小而简单的方法,这些方法我可以在编辑器(visualstudio)的一个页面上看到。

    我从经验中了解到,使代码简单化可以使编译器更容易地优化它。方法越大,编译器就越难工作!

    while (true)
    {
      var smallObject = WaitForSomethingToTurnUp();
      var largeObject = DoSomethingWithSmallObject();
    }
    

    我发现我的应用程序在内存中保存了大量的数据,因为即使在smallObject返回某些内容之前“largeObject”不在作用域内,垃圾回收器仍然可以看到它。

    另外,如果你创建小方法,你在类中的重用率会显著提高。我一般都会尽量确保我的方法都不像其他方法!

    希望这有帮助。

        6
  •  1
  •   Lirik    16 年前

    “在这里和那里做一些小的调整就可以剪切和粘贴”是一种我通常用一种完全没有异国情调的方法来解决的代码重复问题——取相似的代码块,将其提取到一个单独的方法中。在代码块的每个实例中都有一点不同,将其更改为一个参数。

    斯考特也有一些重复性的技巧,如果还有埃尔曼的话: http://www.hanselman.com/blog/CategoryView.aspx?category=Source+Code&page=2

        7
  •  1
  •   Ant    16 年前

    把事情太多的方法分开。如果您不能将一些简洁的东西放入或给它起一个好的名字,那么就开始将函数拆分,直到代码完成为止(即使这些子函数在其他任何地方都不使用)。