什么是“代码偏斜”?


11

在有关Scala的O'Reilly书中,我读到代码的复制粘贴会创建:

...造成代码膨胀,可维护性和偏斜的问题

我在上下文中看不到“歪斜”一词的任何明显定义。我知道复制粘贴的问题,但是我无法使它们适合“歪斜”一词。因为这是O'Reilly的书中使用的,所以我猜想它是循环中真正的编程术语。

有指针吗?

Answers:


19

最传统的定义中的歪斜意味着不对齐(不平行)。显然,在复制和粘贴代码时,两个副本是相同且平行的。这不是不变的。不能保证对一个副本进行更改(由于疏忽或无知)。现在,有两个版本的代码存在于两个不同的位置(已不再相同)。当行为似乎在一个地方而不是另一个地方起作用时,这可能导致奇怪的错误。保持代码干燥(不要重复自己)。

编辑/添加:如果您有复制和粘贴的冲动,则应该将要复制的代码抽象到共享的超类(面向对象)或某种包含的实用程序函数(功能性)中,这很有可能。


+1是一个很好的解释。同样对于某些宣泄来说,我必须处理一个包含数百行复制粘贴代码的代码库,而这种问题正是需要解决的。
KChaloux

2

小时候玩过电话游戏吗?您知道吗,每个人都在对下一个人低声说一个短语,最后一个人最后一个人大声说出该短语,而每个人都对它与原始单词有何不同而大笑?那是歪斜的。复制和粘贴代码时,不可避免地要对一个或多个副本进行小的更改。复制和粘贴相同代码的次数越多,所做的更改就越多,并且代码与原始代码之间的偏差也越大。我见过带有数百个复制和粘贴块的代码,每个块之间只有几个字符之间的差异,几乎无法维护。如果您发现自己想剪切并粘贴一段代码,则可能至少应该考虑将其放入自己的函数中。


3
差异不是由复制粘贴引起的。它们是复制粘贴后发生的情况。
斯蒂芬·C

1
确实如此,但是如果未复制和粘贴代码,则不会发生差异。
Jim Nutt

这是一个很好的例子,但是这个类比是歪曲的。以此类推,粘贴会创建一个不同的副本,而在实际概念中,该副本是相同的,但是没有同步,因此会导致歪斜。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.