- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下载
第1章 风 格
人们看到最好的作家有时并不理会修辞学的规则。还好,当他们这样做虽然付
出了违反常规的代价,读者还经常能从句子中发现某些具有补偿性的价值。除非作
者自己也明确其做法的意思,否则最好还是按规矩做。
William Strunk和E. B. White ,《风格的要素》
下面这段代码取自一个许多年前写的大程序:
这段代码写得很仔细,具有很好的格式。它所在的程序也工作得很好。写这个系统的程序员会
对他们的工作感到骄傲。但是这段摘录却会把细心的读者搞糊涂:新加坡、文莱、波兰和意大
利之间有什么关系?为什么在注释里没有提到意大利?由于注释与代码不同,其中必然有一个
有错,也可能两个都不对。这段代码经过了执行和测试,所以它可能没有问题。注释中对提到
的三个国家间的关系没有讲清楚,如果你要维护这些代码,就必须知道更多的东西。
上面这几行实际代码是非常典型的:大致上写得不错,但也还存在许多应该改进的地方。
本书关心的是程序设计实践,关心怎样写出实际的程序。我们的目的是帮助读者写出这
样的软件,它至少像上面的代码所在的程序那样工作得非常好,而同时又能避免那些污点和
弱点。我们将讨论如何从一开始就写出更好的代码,以及如何在代码的发展过程中进一步改
进它。
我们将从一个很平凡的地方入手,首先讨论程序设计的风格问题。风格的作用主要就是
使代码容易读,无论是对程序员本人,还是对其他人。好的风格对于好的程序设计具有关键
性作用。我们希望最先谈论风格,也是为了使读者在阅读本书其余部分时能特别注意这个问
题。
写好一个程序,当然需要使它符合语法规则、修正其中的错误和使它运行得足够快,但
是实际应该做的远比这多得多。程序不仅需要给计算机读,也要给程序员读。一个写得好的
程序比那些写得差的程序更容易读、更容易修改。经过了如何写好程序的训练,生产的代码
更可能是正确的。幸运的是,这种训练并不太困难。
程序设计风格的原则根源于由实际经验中得到的常识,它不是随意的规则或者处方。代
码应该是清楚的和简单的 —具有直截了当的逻辑、自然的表达式、通行的语言使用方式、
2计计程序设计实践
下载
有意义的名字和有帮助作用的注释等,应该避免耍小聪明的花招,不使用非正规的结构。一
致性是非常重要的东西,如果大家都坚持同样的风格,其他人就会发现你的代码很容易读,
你也容易读懂其他人的。风格的细节可以通过一些局部规定,或管理性的公告,或者通过程
序来处理。如果没有这类东西,那么最好就是遵循大众广泛采纳的规矩。我们在这里将遵循
《C程序设计语言》(The C Programming Language) 一书中所使用的风格,在处理 J a v a和C++ 程
序时做一些小的调整。
我们一般将用一些好的和不好的小程序设计例子来说明与风格有关的规则,因为对处理
同样事物的两种方式做比较常常很有启发性。这些例子不是人为臆造的,不好的一个都来自
实际代码,由那些在太多工作负担和太少时间的压力下工作的普通程序员 (偶然就是我们自己)
写出来。为了简单,这里对有些代码做了些精练,但并没有对它们做任何错误的解释。在看
到这些代码之后,我们将重写它们,说明如何对它们做些改进。由于这里使用的都是真实代
码,所以代码中可能存在多方面问题。要指出代码里的所有缺点,有时可能会使我们远离讨
论的主题。因此,在有的好代码例子里也会遗留下一些未加指明的缺陷。
为了指明一段代码是不好的,在本书中,我们将在有问题的代码段的前面标出一些问号,
就像下面这段:
为什么这些# d e f i n e有问题?请想一想,如果某个具有 T W E N T Y个元素的数组需要修改得更大
一点,情况将会怎么样。至少这里的每个名字都应该换一下,改成能说明这些特殊值在程序
中所起作用的东西。
1.1 名字
什么是名字?一个变量或函数的名字标识这个对象,带着说明其用途的一些信息。一个名
字应该是非形式的、简练的、容易记忆的,如果可能的话,最好是能够拼读的。许多信息来
自上下文和作用范围(作用域) 。一个变量的作用域越大,它的名字所携带的信息就应该越多。
全局变量使用具有说明性的名字,局部变量用短名字 。根据定义,全局变
文档评论(0)