一、什么是可维护性的代码?
通常,说代码“可维护”就意味着它具备如下特点。
容易理解:无须求助原始开发者,任何人一看代码就知道它是干什么的,以及它是怎么实现的。
符合常识:代码中的一切都显得顺理成章,无论操作有多么复杂。
容易适配:即使数据发生变化也不用完全重写。
容易扩展:代码架构经过认真设计,支持未来扩展核心功能。
容易调试:出问题时,代码可以给出明确的信息,通过它能直接定位问题。
二、如何做到?
1、编码规范
1.1 可读性——缩进和注释可以让代码更容易理解,将来也更容易维护。
要想让代码容易维护,首先必须使其可读。可读性必须考虑代码是一种文本文件。为此,代码缩进是保证可读性的重要基础。如果所有人都使用相同的缩进,整个项目的代码就会更容易让人看懂。缩进通常要使用空格数而不是 Tab(制表符)来定义,因为后者在不同文本编辑器中的显示不同。
可读性的另一方面是代码注释。
函数和方法。每个函数和方法都应该有注释来描述其用途,以及完成任务所用的算法。同时,也写清使用这个函数或方法的前提(假设)、每个参数的含义,以及函数是否返回值(因为通过函数定义看不出来)。
大型代码块。多行代码但用于完成单一任务的,应该在前面给出注释,把要完成的任务写清楚。
复杂的算法。如果使用了独特的方法解决问题,要通过注释解释明白。这样不仅可以帮助别人查看代码,也可以帮助自己今后查看代码。
使用黑科技。由于浏览器之间的差异,JavaScript 代码中通常包含一些黑科技。不要假设其他人一看就能明白某个黑科技是为了解决某个浏览器的什么问题。如果某个浏览器不能使用正常方式达到目的,那要在注释里把黑科技的用途写出来。这样可以避免别人误以为黑科技没有用而把它“修复”掉,结果你已解决的问题又会出现。
1.2 变量和函数名
以下是关于命名的通用规则。
变量名应该是名词,例如 car 或 person。
函数名应该以动词开始,例如 getName()。返回布尔值的函数通常以 is 开头,比如 isEnabled()。844 第 28 章 最佳实践
对变量和函数都使用符合逻辑的名称,不用担心长度。长名字的问题可以通过后处理和压缩解决(本章稍后会讨论)。
变量、函数和方法应该以小写字母开头,使用驼峰大小写(camelCase)形式,如 getName()和isPerson。类名应该首字母大写,如 Person、RequestFactory。常量值应该全部大写并以下划线相接,比如 REQUEST_TIMEOUT。
名称要尽量用描述性和直观的词汇,但不要过于冗长。getName()一看就知道会返回名称,而PersonFactory 一看就知道会产生某个 Person 对象或实体。
要完全避免没有用的变量名,如不能表示所包含数据的类型的变量名。通过适当命名,代码读起来就会像故事,因此更容易理解。
1.3 变量类型透明化
第一种标明变量类型的方式是通过初始化。定义变量时,应该立即将其初始化为一个将来要使用的 类型值。例如,要保存布尔值的变量,可以将其初始化为 true 或 false;而要保存数值的变量,可以将其初始化为一个数值。再看几个例子:
// 通过初始化标明变量类型
let found = false; // 布尔值
let count = -1; // 数值
let name = ""; // 字符串
let person = null; // 对象
2、松散耦合
- 解耦 HTML/JavaScript
理想情况下,HTML 和 JavaScript 应该完全分开,通过外部文件引入 JavaScript,然后使用DOM 添加行为。
-
解耦 CSS/JavaScript
-
解耦应用程序逻辑/事件处理程序
3、编码惯例
-
尊重对象所有权
最好的方法是永远不要修改不属于你的对象。
-
不声明全局变量
与尊重对象所有权密切相关的是尽可能不声明全局变量和函数
-
不要比较 null
if (values != null) { // 不要这样比较!
-
使用常量
重复出现的值:任何使用超过一次的值都应该提取到常量中,这样可以消除一个值改了而另一 个值没改造成的错误。这里也包括 CSS 的类名。
用户界面字符串:任何会显示给用户的字符串都应该提取出来,以方便实现国际化。
URL:Web 应用程序中资源的地址经常会发生变化,因此建议把所有 URL 集中放在一个地方管理。
任何可能变化的值:任何时候,只要在代码中使用字面值,就问问自己这个值将来是否可能会变。如果答案是“是”,那么就应该把它提取到常量中。