好的代码和坏的代码
“好”的代码与“坏”的代码
虽然对于“什么是优秀的代码“难以形成一致意见,但是这么多年的经验,让我对代码“好”与“坏”积累了一些自己的看法。
比如说,“好”的代码应该:
- 容易理解;
- 没有明显的安全问题;
- 能够满足最关键的需求;
- 有充分的注释;
- 使用规范的命名;
- 经过充分的测试
“坏”的代码包括:
- 难以阅读的代码;
- 浪费大量计算机资源的代码;
- 代码风格混乱的代码;
- 复杂的、不直观的代码;
- 没有经过适当测试的代码
优秀的代码是“经济”的代码,投入少、收益大、投资回报高。
优秀的代码是经济、规范、安全的代码。
要做只有你才能做的事情。
要坚持做需要做的事情。
写代码的建议
代码分块
一个好的程序员,要识别并且区分代码块,让它们易于阅读和辨认。程序代码分块时,我们需要注意以下三个点。
-
保持代码块的单一性,一个代码块只能有一个目标。代码块内所有的内容都是为了一个目标服务的,
不能把无关的内容放在同一个代码块里。同一个代码块里语句的相互联系比与相邻代码块里的语句关系更为紧密; -
注意代码块的完整性。代码块是一个完整的信息块。一个代码块要表达一个相对完整的意思,不能一个意思没说完就分块了,就像话说了半句一样;
-
代码块数量要适当。代码块过多,会让人觉得路径太长,逻辑复杂,不容易阅读理解。一个基础的代码块最好不要超过 25 行(通常显示屏小半个页面),否则就会有增加阅读理解的困难。
API设计
对问题领域进行合理抽象,然后设计响应的对象与类层次结构来表达该抽象。
抽象是关于一些事物的简单描述,不需要对编程实现有任何了解即可理解。
它强调事务的特性和职责,而忽略那些对理解其本质不是很重要的细节。
你往往会发现复杂问题表现出的抽象的层次结构或者说分层。(Henning,2009)
Grady Booch认为任何复杂系统都有两种层次化视角:
- 对象层次结构:描述系统中不同的对象如何合作。这表现为基于对象之间part of
…是的一部分 这种关系的结构化分组。(例如:活塞是引擎的一部分,而引擎是汽车的一部分) - 类层次结构:描述共存于关联对象之间的公共结构和行为。它会处理对象属性的泛化和特化。可以认为是对象层次结构之间的is a关系。…是…, 油店混合型引擎是一种汽车引擎
一般认为软件构建的设计阶段由两个主要活动组成:
(1) 架构设计:描述软件的顶层结构与组织
(2) 详细设计:在一个足够详细的层面描述设计中单独的组件,组件可以利用此描述信息来实现。
API设计 包括开发顶层架构和详细的类层次结构。
- 架构设计
- 类设计
- 函数设计
作为一般性方法,我们建议首先定义对象层次结构来描述系统的顶层概念性结构(或者说架构),然后完善类的层次结构,其中类的层次结构详细说明了具体的、客户可以使用的C++类。后面定义API中类的过程也包括考虑单个函数以及它们提供的参数等事项。