翻译《有关编程、重构及其他的终极问题?》——12.当使用拷贝黏贴,一定要特别注意最后一行

翻译《有关编程、重构及其他的终极问题?》——12.当使用拷贝黏贴,一定要特别注意最后一行

标签(空格分隔): 翻译 技术 C/C++
作者:Andrey Karpov
翻译者:顾笑群 - Rafael Gu
最后更新:2016年12月23日


12.当使用拷贝黏贴,一定要特别注意最后一行

这次这个bug是在Source SDK项目中发现的。PVS-Studio的诊断是这么描述这个而错误的:V525 The code containing the collection of similar blocks. Check items ‘SetX’, ‘SetY’, ‘SetZ’, ‘SetZ’(译者注:大意是代码中包含了一些近似的块,请检查’SetX’,’SetY’,’SetZ’,’SetZ’)。

inline void SetX( float val );
inline void SetY( float val );
inline void SetZ( float val );
inline void SetW( float val );

inline void Init( float ix=0, float iy=0,
                  float iz=0, float iw = 0 ) 
{
    SetX( ix );
    SetY( iy );
    SetZ( iz );
    SetZ( iw );
}

解释
我可以100%确认这段代码是复制黏贴的。其中一行被复制了多次,其中只有部分字母改变了。最后,这种方式让程序员犯错了:他的注意力减弱了,然后忘记了把最后一行的‘Z’改成‘W’。

在这个例子中,我们不会把焦点放在程序员如何犯错这点上,我们要注意的是在单调的行为的最后,错误发生了。

我非常建议大家读一读“最后一行的影响”这篇文章,因为大家对这篇文章的关注,一个更系统的版本已经发布了。

在这篇文章中,简单的来说,主要通过统计的数据阐明了用拷贝黏贴的方式,非常有可能在最后一行犯错。

正确的代码

{
    SetX( ix );
    SetY( iy );
    SetZ( iz );
    SetW( iw );
}

建议
我希望你已经读了我前面提到的文章,这样,我们可以再次处理接下来的现象。当我们写一些近似的代码块时,程序员经常会复制黏贴有轻微改变的代码。当这么做时,他们容易忘记改变一些特定的单词或字母,而且因为注意力的减弱,这最容易在这些单调反复的动作的最后发生。

为了减少类似的错误,这里有一些技巧:

  1. 把你的近似代码块放在“列表”中:这样就可以使得错误更明显。我们将会在下小节讨论“列表”代码布局。也许这种列表代码布局在这个例子中不是特别有效,但依然对编程是很有帮助的。
  2. 当使用复制黏贴是,务必保持小心和谨慎。集中注意力,并且重复检查你写的代码——特别是最后几行。
  3. 已经知道了最后几行的影响;尝试把这些记在心里,并且告诉你的同事们。当你明确知道是什么导致你容易犯下这个错误时,就更容易避免犯这个错误。
  4. 和你的同事们分享“最后一行的影响”这篇文章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值