了一个错综复杂的算法,你也能很快看出它所从事的任务,以及它的风格。举个例子,然后说“照着做”总是很容易的,但我想这一章应该使你打下写专业化代码的坚固基础,这一基础将区分真正精心编制的代码和一个草草完成的程序段。抱歉的是,由于篇幅所限,我们不能按我们所希望的那样详尽地讨论良好的代码书写风格的每一方面,但本章将给你一个很好的开始。我们期望你能迅速获得专用的材料,以熟悉
软件设计和工程的每一要点。编码是一个很广的领域,几乎是一门独立的科学。有许多论文论述它,虽然这些论文大多很乏味,很理论化,但在应用中是不可放弃的。下面我们就最重要的问题进行最基本的讨论。1.3.1选择名字选择变量名可能是程序员最常做、但却想得最少的。如果你已建立了这些在大项目中出现的变量名字、类型、定义位置的清单,那么你就创建了一个类似于小电话簿的东西,你想让你的清单成为什么样子呢?不同的命名方案已发展起来了,它们有不同的思想及各自的优点和缺点,这些
方案一般分为两类:简短的变量和函数名及谈话式的变量和函数名(描述变量类型和目的的更长的名字)。某个电话目录可能是这个样子的,如表1-1所示。
4
部分第一部分分高级PHP
下载
表1-1电话目录
地址382W.S204E.R.电话-3951-8382
J.D.M.S.
这份列表非常有意思:该
列表有两个条目,但并没有更多的信息。人名只有首字母,没有全称;只有房间号,但没有街道名;只有电话号码的一部分,却没有完整的号码。让我们看另外一个例子,如表1-2所示。
表1-2电话目录
姓名地址电话
ht5ft9in_age32_JohnDoe_male_marriedht5ft6in_age27_MarySmith_female_single
386WestStreet,LosAngeles,California,USA,Earth204EastRoad,LosAngeles,California,USA,Earth
+1-555-304-3951
+1-555-306-8382
在这个例子中,每个人的名字包括身高、年龄、性别及婚姻状况。地址中不但包括街道和城市,而且也包括州、国家、甚至星球。电话号码附加了国家和地区号。第二种解决方案比第一种好吗?两个都不是最好的。在程序课上讲授的这两种解决方案,都不令人满意,定义一种类型tpIntMyIntegerCounter,然后声明一个变量instMYIntegerCyunterInstance。如果仅仅需要遍历一个数组并将所有元素都设为0,这无疑显得太冗长了(见清单1-1)。
清单1-1一个过于冗长的实例
另一方面,使用I、j、k(而不是像$instMyIntegerCounterInstance这样长的名字)也是不可接受的,尤其当我们从事的是像
压缩这样复杂的缓冲操作的时候更是如此。这只是普遍思想被误用的一个简单例子,该怎么办?解决的办法是选择好的整体思想,然后在适当的地方加以例外处理,当写一个应用程序时,应该知道你的代码从事的是什么工作,能够快速地从一点转到另一点—但其他人可能认为这并不容易。如果你从开发组的某个人手中获得一个源文件并需要添加一些特征,首先必须对其进行整体把握,并区分代码的各个部分。理想情况下,这一过程将和阅读源文件平行进行,但由于在没有提示和公共样本帮你理清代码来阅读的情况下,这是不可能做到的,所以在
源代码中包含尽可能多的额外信息,并且使得明显的事实不易于混淆就显得很