第三条军规——NoCopy 不要随意的去复制代码
2011-05-12 17:26
211 查看
不要随意的去拷贝代码,实际上这一条与第一条是相辅相成的。时常编写程序时,很多人,包括我以前,都有一种很不好的习惯——复制粘贴代码。某些类似的功能,可能在某个函数里出现过。之后,在另一个地方也有了类似的需求,怎么办,把那段代码Copy过来吗?这是我以前经常做的一件事。实际上,由于时间、精力方面的原因。我现在也经常干这些事情。
但是,请记住——这样做非常不好!为会么?首先,它会使你很容易违反第一条军规。你随便在一个函数里从其它地方Copy两三处代码,你就可能会使你现在的函数超长了。其次,你Copy的代码如果是很成熟的也就罢了,往往很多Copy过来的代码是没有经过实践充分检验的。如果出现BUG怎么办?你就满世界去找相似的代码吧!
往往被拷来拷去的代码代表了一种很常见的功能需求。即使你拷过来后,改了一些步骤,改了一些变量类型。但是从整体上看,仍是那些功能。正确的作法是什么?正确的作法是将这些代码单独封装到一个函数中去。
对于以上类似的情况,很多前人已经都考虑过了,在编程语言中也提供了辅助你实现抽象的帮助——如C++中的模板、.NET与Java中的泛型之类。而很多类库、函数库实际上也是这么一回事——将常用的功能抽象出来。
这么做有什么好处?最大的好处,方便改BUG。同时,随着时间的推移,你会积累越来越多的功能代码,对于你以后的编程是一笔不小的财富。
严家俊
2011年5月12日
但是,请记住——这样做非常不好!为会么?首先,它会使你很容易违反第一条军规。你随便在一个函数里从其它地方Copy两三处代码,你就可能会使你现在的函数超长了。其次,你Copy的代码如果是很成熟的也就罢了,往往很多Copy过来的代码是没有经过实践充分检验的。如果出现BUG怎么办?你就满世界去找相似的代码吧!
往往被拷来拷去的代码代表了一种很常见的功能需求。即使你拷过来后,改了一些步骤,改了一些变量类型。但是从整体上看,仍是那些功能。正确的作法是什么?正确的作法是将这些代码单独封装到一个函数中去。
对于以上类似的情况,很多前人已经都考虑过了,在编程语言中也提供了辅助你实现抽象的帮助——如C++中的模板、.NET与Java中的泛型之类。而很多类库、函数库实际上也是这么一回事——将常用的功能抽象出来。
这么做有什么好处?最大的好处,方便改BUG。同时,随着时间的推移,你会积累越来越多的功能代码,对于你以后的编程是一笔不小的财富。
严家俊
2011年5月12日
相关文章推荐
- JavaScript关于不要复制黏贴代码的心得
- 几组超神奇的网页应用代码要你在IE浏览器任意打开一个网站,然后在浏览器上输入如下代码神奇的代码,可随意修改复制页面内容!
- 不要复制别人的代码 自己敲出来!
- 神奇的代码 通杀各种网站-可随意修改复制页面内容
- 不要复制别人的代码 自己敲出来!
- 神奇的代码 可随意修改复制页面内容
- 神奇的代码 通杀各种网站-可随意修改复制页面内容
- 经验教训:移植或复制代码时,一定要坚持用什么移植什么的原则,不要有用无用全移植,这样后续麻烦会很多。
- 不要随意的重复代码
- 状态栏和navigationbar 关联上,结构体总是通过被复制的方式在代码中传递,因此请不要使用引用计数。
- JS复制到剪贴板示例代码
- 为什么不要工程中不要随意使用define定义常量
- Java实现文件夹的复制、移动、删除代码
- 汇编语言中将代码段的代码复制到指定地址的方法
- 文件映射mmap简单设置文件大小(lseek (ftruncate可以设置文件大小))__使用mmap即文件映射实现文件的快速复制代码
- Google推荐的15条军规:HTML5代码规范
- DDR2 复制iram中的前8K代码到ddr中的实现方法
- 网页中复制代码的功能(jscopy) 如何制作网页(代码复制)
- MyEclipse删除复制代码中的行号
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!