在编写大型程序的过程中,我曾多次问过将代码放入一个函数或方法中有意义多少次复制和粘贴,什么是良好的经验法则?我一直在使用四行或更多行的经验法则,出现两次以上,然后创建包含该代码的简单函数/方法。您能想到更好的做法还是提供任何指示?这更多的是一般设计模式问题,而不是语言特定的问题。
在编写大型程序的过程中,我曾多次问过将代码放入一个函数或方法中有意义多少次复制和粘贴,什么是良好的经验法则?我一直在使用四行或更多行的经验法则,出现两次以上,然后创建包含该代码的简单函数/方法。您能想到更好的做法还是提供任何指示?这更多的是一般设计模式问题,而不是语言特定的问题。
Answers:
我部分使用函数作为记录代码的一种方式。调用具有有意义名称的函数可以更轻松地理解代码。在某些情况下,甚至单行的函数也是有意义的。
例如,在Clean Code中,Robert C. Martin提供了以下示例:您希望看到哪一个?这个:
// Check to see if the employee is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) &&
(employee.age > 65))
或这个?
if (employee.isEligibleForFullBenefits())
我并不总是同意他的观点,但在这种情况下,我同意。代码应该是可读的,不仅在您编写代码并且知道每个细节时,而且在晚上9点(当您必须修复他人代码中的错误时)也应该可读。不建议长时间凝视并尝试找出所有双重否定词。如果您可以在上面加上名称(不仅是条件,还可以是您编写的每段代码),它就会变得简单得多。
我从不后悔在函数中添加某些内容,如果您担心性能,请首先进行介绍。
普遍存在误解,即仅应避免重复代码段来进行函数调用。我的经验法则是,即使仅在单个位置使用逻辑上的任何工作单元,也应将其制成一个函数。这通常可以提高可读性,并允许您编写自文档代码,其中函数名代替注释,而您无需编写其他注释来解释您的工作。
如果它超过使用一个地方,
然后使其成为函数或方法。根据我的经验,一长段重复的代码自然会属于这些类别之一(通常是第一个类别,但随后的类别重叠很多;)。当然,接口中必须包含的任何内容本身也是一种功能/方法。
float x
,int y
和double density
,然后设置这些计算为C函数可不仅仅是重复的代码麻烦,因为你必须想出一个办法,让所有三个值了。如果重复计算本身是小事,它有时最好还是让他们在线。
几乎总是这样,特别是如果每个重复从概念的角度表示相同的操作。如果以相同的方式执行此操作,但对不同的类型执行此操作,则进行通用实现。
我不能想到的唯一原因是维护之一:有时,即使在某些重复的情况下,避免在单独的事物之间建立依赖关系可能更为方便。
搜索“ 重构 ”将使您获得许多用于此非常常见过程的行业“最佳实践”的资源。一篇颇有名气的文章“ 一次又一次”是一个很好的历史参考资料,它解释了您的问题所引起的关注是什么“最佳实践”观点。同样,更笼统的概念称为“ 不要重复自己”(DRY)。有关问题的真正答案,请阅读Martin Fowler的经典著作《重构:改进现有代码的设计》,其中涵盖了一些最著名的重构建议,这是您直观地尝试完成的工作!