Syl*_*ain 49 refactoring coding-style dry code-duplication
在最近的一次代码审查中,我在一个类中发现了几行重复逻辑(少于15行).当我建议作者重构代码时,他认为代码更容易理解.在再次阅读代码后,我不得不同意提取重复的逻辑会稍微损害可读性.
我知道DRY是指南,而不是绝对的规则.但总的来说,你是否愿意以DRY的名义伤害可读性?
Nic*_*kis 58
三规则
你第一次做某事,你就是这样做的.第二次你做
类似的事情,你在复制时畏缩,但
无论如何你都做了重复的事情.你第三次做类似的事情,你重构.
三次罢工,你重构.
Seibel:所以对于这些XII调用中的每一个,你都在编写一个实现.
你有没有发现你在积累大量非常相似的代码?Zawinski:哦,是的,当然.通常在第二次或第三次你剪切并粘贴
那段代码时,好吧,是时候停止剪切和粘贴并将其放入子程序中.
Vin*_*vic 41
我绝不容忍.由于时间限制或诸如此类的原因,我最终可能会遇到一些问题.但我仍然没有找到重复代码真正需要的案例.
说它会损害可读性只表明你擅长挑选名字:-)
Ree*_*sey 32
就个人而言,我更喜欢保持代码可以理解,首先是.
DRY是关于简化代码维护的.在许多情况下,使代码不易理解以删除重复的代码会比使用重复的代码行更容易损害可维护性.
话虽如此,我确实同意DRY是一个很好的目标,在可行的情况下.
Ira*_*ter 12
如果相关代码具有明确的业务或技术支持目的P,您通常应该重构它.否则,您将遇到克隆代码的经典问题:最终您将发现需要修改支持P的代码,并且您将找不到实现它的所有克隆.
有些人建议3个或更多副本是重构的门槛.我相信如果你有两个,你应该这样做; 无论你有两个或三个或更多,在大系统中找到其他克隆[甚至知道它们可能存在]都很难.
现在,在没有任何工具来查找克隆的情况下提供此答案.如果你可以可靠地找到克隆,那么重构的原因(避免维护错误)就不那么具有持久性了(具有命名抽象的效用仍然是真实的).你真正想要的是一种查找和跟踪克隆的方法; 抽象它们是确保你"找到"它们的一种方法(通过使发现变得微不足道).
可以可靠地查找克隆的工具至少可以防止您进行无法更新克隆的维护错误.一个这样的工具(我是作者)是CloneDR.CloneDR使用目标语言结构作为指导查找克隆,因此无论空格布局,注释中的更改,重命名的变量等如何都可以找到克隆(它适用于多种语言,包括C,C++,Java,C#,COBOL和PHP) ).CloneDR将在大型系统中找到克隆,而不会给出任何指导.显示了检测到的克隆以及反清除器,它实际上是您可能编写的抽象.它的版本(对于COBOL)现在与Eclipse集成,并在您在缓冲区中的克隆内部以及其他克隆的位置进行编辑时向您显示,以便您在那里时可以检查/修改其他克隆.(你可能做的一件事就是重构它们:).
我曾经认为克隆是完全错误的,但是人们这样做是因为他们不知道克隆与原始克隆会有什么不同,所以最终的抽象在克隆行为发生时并不明确.现在我相信克隆是好的,如果你可以跟踪克隆,并在抽象变得清晰后尝试重构.
一旦你重复任何事情,你就会创建多个地方进行编辑,如果你发现你犯了错误,需要扩展它,编辑,删除或者你可能遇到的其他几十个原因强迫改变.
在大多数语言中,将块提取到适当命名的方法很少会损害您的可读性.
这是你的代码,符合你的标准,但我的基本答案是你的"多少钱?" 是无 ...