如何书写出优秀的代码

如何书写出优秀的代码

 

简练。这意味着能用五行代码解决的问题,绝不用十行代码。这也意味着,必须花费更多的精力来保证代码的简练,而不是生产令人费解的代码;这还意味着,你所厌恶的事情,是连篇累牍的开放性代码和函数。简练——即结构好,可执行,设计优秀——可以让你的代码更易于理解,也减少了错误的发生。

 

可读性强。正如其字,这说明你的代码应该更能让其他人看懂。要做到可读性强,就得多写注释,符合大众习惯,不要自作聪明地命名变量,比如说,用 taxrate 代替 rt 。

 

模块化。这意味,你得像宇宙的构成一样来开发程序。世界是由分子构成的,而这些分子又同原子,电子,核子,夸克,和连线 (如果你相信的话) 组成。类似的,优秀的程序也是由小模块建立成大的系统,而这些小模块又由更小的部分来组成。你完全可以只使用移动,插入和删除三个简单的应用,来编写一个文本编辑器。就像原子的构成方式一样,软件的组件也应该具有复用性。

 

层次性。程序得像蛋糕内部一样层次分明。应用运行在框架之上,框架运行在系统之上,而系统又运行在硬件之上。就算是应用程序的内部,也应该有层次。高级层访问低级层,而且事件正好相反(向下访问,向上返回) ,低级层不应该知道高级层在干些什么。事件/反馈的基本特性,就是向上发出无指向性通知。如果你的文档直接访问了框架,那可就有危险了。模块和层次由 API 来定义,这样就限定了各自的运行范围。因此,设计就变得由为重要了。

 

设计良好。在开发程序之前,要先花些时间来设计你的程序,因为思考的代价要小于调试。优秀的开发准则就是,花一半时间来设计。你得写一份功能说明 (这个程序是用来干嘛的) 和一个深层蓝图,而 API 的功能也应该整理成文。

 

高效。程序不但要运行快,而且要节省资源,它不能牵扯到文档,数据连接等等。程序只做它该做的事,不能胡乱地装载和撤销线程。在运行层上,你可以在测试之后才优化程序;但是在高级层,你必须先计划好执行过程。如果设计中要求服务器有大批量的延迟,最好用一个 DOG(DataOutput Gate ,数据输出门)。

 

优雅。和漂亮是一个概念,它难以描述却显而易见。优雅综合了简练,高效和简明等概念,同时还能让人感受到高贵的气质。举个例子,优雅就是使用表格,或者是用递归来编写程序:

{

    return n==0 ? 1 : n* factorial(n-1);

}

 

清晰。清晰是优秀代码的基本,也是其他要素的品质保证。相对于普通机械,计算机建立更为复杂的系统的能力要强得多。对于编程来说,最基础的挑战就是减少复杂度。简单、可读性强、模块化、层次、设计良好、高效、优雅,都是久经考验达成简练代码的方法,这些可以有效地减少代码的复杂度。

 

 

 

编程规范

 

1. 基本要求

1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。

1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。

1.3 尽量使用标准库函数和公共函数。

1.4 不要随意定义全局变量,尽量使用局部变量。

1.5 使用括号以避免二义性。

 

2.可读性要求

2.1 可读性第一,效率第二。

2.2 保持注释与代码完全一致。

2.3 每个源程序文件,都有文件头说明,说明规格见规范。

2.4 每个函数,都有函数头说明,说明规格见规范。

2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。

2.7 常量定义(DEFINE)有相应说明。

2.8 处理过程的每个阶段都有相关注释说明。

2.9 在典型算法前都有注释。

2.10 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 6个字节。

2.11 循环、分支层次不要超过五层。

2.12 注释可以与语句在同一行,也可以在上行。

2.13 空行和空白字符也是一种特殊注释。

2.14 一目了然的语句不加注释。

2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。

2.16 注释行数(不包括程序头和函数头说明部份)应占总行数的 1/5 到1/3 。

 

3. 结构化要求

3.1 禁止出现两条等价的支路。

3.2 禁止GOTO语句。

3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。

3.4 用 CASE 实现多路分支。

3.5 避免从循环引出多个出口。

3.6 函数只有一个出口。

3.7 不使用条件赋值语句。

3.8 避免不必要的分支。

3.9 不要轻易用条件分支去替换逻辑表达式。

 

4. 正确性与容错性要求

4.1 程序首先是正确,其次是优美

4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。

4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。

4.4 所有变量在调用前必须被初始化。

4.5 对所有的用户输入,必须进行合法性检查。

4.6 不要比较浮点数的相等,如: 10.0 * 0.1 == 1.0 , 不可靠

4.7 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等。

4.8 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。

 

5. 可重用性要求

5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。

5.2 公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。

5.3 公共控件或类应建立使用模板。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值