尽信书则不如无书
2008-04-09 04:06:31来源:互联网 阅读 ()
尽信书则不如无书--忘了这句话的出处了,但是本猫觉得它特正确.特别是现在市面上什么书都有,良莠不齐,这句话就更显的正确.而且,就算是很多被称为经典的书籍,里面也有很多值得商榷的地方--很简单,再经典的书也是人写的,观点总是有不够全面的地方.如果对书的内容不加分析的全盘接受,不能具体情况具体分析,那就更是还不如不看这本书了.
最近市面上出了不少国外计算机经典书籍,C 编程方面的就有Effective C , C Premier,C Programming language等等等等.这些书的作者功力深厚,内容安排与以前国内常见的书籍颇有不同,相当多的人都在研读.但是如果把他们当成圣旨,认为其中的全是金科玉律,就有点过了.
前一段项目组里新来了一个程序员.在项目进行过程中,偶然间发现他改了旧代码中的
不少内容,仔细看了一下,大概有这么几类:
1.函数声明中的int,
long之类的参数都改成了constant int&,或者constant long&.
2.把相当多的int变量改成了unsigned
int
3.把循环变量for(int i = 1; i < 10; i )这样的循环声明改成了
for(int
i = 1; i < 10; == i)
本猫发现就找他谈,他引经据典的跟本猫解释:
对于第一类修改,在Effective C 中作者专门说过,要尽量用常量引用(constant
..&)来替代一般的参数声明,这样程序不容易出错.
对于第二类修改,也就是说把int变量改成unsigned
int,是因为该变量是用来表示长度或者别的只有正数的状态,某本书里面这样说过,能用unsigned
int的地方就坚决不用int.
至于第三类修改,在某本经典书籍里说过,i 会产生一个临时变量,这个临时变量在此处完全是浪费,用 i就不会有这种浪费,等等等等.
本猫听了一笑,按说这个程序员还是很努力,还真看了不少书,可惜有的东西并没有吃透.于是本猫跟他解释:
首先,最重要的,一个工程里面应该有纪律,不应该你修改的地方就绝对不能修改,因为旧的代码已经经过了严格的测试,已经相当稳定,如果不是发现功能上的问题,就不应该动,因为这样的修改只意味着可能带入新的bug.
其次,尽信书则不如无书,并不是书上写的就一定正确.
拿第一类修改来说,首先,在效率上,int型参数与constant
int&型参数是一样的,因为
此时传值(int型)和传地址(constant
int&)都是4个byte--这与大对象的传递是完全不同的;其次,按书上说,constant
int&型参数声明最大的好处是,当程序员在该参数位置上错误的使用了其他类型的变量,比如说short或者long以后,编译器可以报错--但是这对我们来说并非一定是好处,很多情况下我们需要在这个参数的位置上用short型的变量,因为这样简单方便.具体的说,比如我有一个变量
short
a;
如果函数声明是:
void func(int)
我可以直接使用func(a);
但是如果函数声明是:
void
func(const int&) 的话,
我就要先声明一个int型的临时变量,把它设成a,然后才能调用func--显然很不方便.
至于第二类修改,说能用unsigned int的地方一定要用unsigned int, 这句话本身没有毛病,但关键是什么地方能用?经常有这样的情况:一个变量正常的时候是正数,但是需要用负值来标志特殊状态.比如说一个变量是用来表示长度的,但是当长度不确定时,就应该把它设成负值.所以,只要能保证值域正确,用int来代替unsigned int对我们只有好处.
再说第三类修改,用 i代替i 可以节省一个临时变量,这个说法当然没错,能省一点内存当然好.但是这样一条经验真的很重要?现在一台PC的标准配置是128M内存,那4个byte就那么珍贵?而且现在编译器绝对可以把那个多余的变量优化掉.你觉得这4个byte跟你付出的时间那个更珍贵些呢?
那个程序员听了后表示认同.本猫则想起了其他的例子.
比如说goto语句.几乎所有的书都说应该避免goto语句,说goto如何丑陋.但是看看一些高手写的程序,linux,或者是微软的库代码,还是可以发现goto的踪迹.实际上,在一个函数内使用goto语句进行跳转,是处理错误的常用方法,非常简便实用.有什么理由就因为那些学院派的人说它破坏"美感"就要弃之不用呢?
再比如说,有的书上说应该用C 新标准中的新的类型转换语句来替换以前的静态类型转化.但是真的有必要吗?其他的我不知道,至少本猫曾在C Programming Language中读到过,该书的作者并不喜欢用新的类型转换,所以他还是用老的静态类型转换来写例子.
说了这么多,还是那句话:尽信书则不如无书.对书里面的内容还是要有选择的接受.记得以前见过这样一句有趣的名言:"死书读活人,能把活人读死;活人读死书,则能把死书读活"...
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:银行业系统集成人员分析
下一篇:基于构件的软件开发的发展方向
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash