业界参考
参考资料
如何写出无法维护的代码?
The Joel Test
The better parts
质量意识
- 没时间写单元测试
- 没时间写测试,有时间写bug
- 每一行都要加注释
- 正确的注释应该是why而不是how
- 代码中的空格、括号非常重要
- 空格、括号没那么重要
- 有时间了再重构
- 重构要每天都进行
测试是测试人员的工作
人员水平
- 大部分对质量提升的方法是堆时间(加班
- 正确的办法是自动化、监控、预警
- 大部分代码质量还停留在靠Lint工具
- 正确的做法是静态分析、单元测试、不断重构
- 要去做
We are not paid to use every feature of the language we are paid to write programs that work well and are free of error.
共识
1960年代,花了一代人的时间去认同高级语言是好的(反方:机器语言效率高
1970年代,花了一代人的时间去认同goto是不好的,支持结构化编程
1980年代,花了一代人的时间去认同对象是好的,发展面向对象
1990年代,花了两代人的时间去认同lambda表达式是好的(Java、C++、PHP、JS加强支持
不要用的JS特性
- 绝对不要用
- 全局变量
- var声明
- ==运算符
- 包装类型String/Boolean
- 有些人不用
- class/new/this
- 比如React Hooks那帮人
用的人不多,尽量少用
一定要用
- ===全等
- …展开运算符
- 模块 import export
- let and const
- 析构赋值
- Promise/await
- 可以使用
- class
- getter/setter
- WeakMap
- Proxy
存在问题但是可用
坏的命名举例
首要规则
- 能让人秒懂
function user(userId){
return axios.get(`/users/${userId}`)
.then((res)=>{
console.log(res.data)
}, handerError)
}
//重构
user.get = (id) => {
return axios.get(`/users/${id}`)
.then((response)=>{
console.log(response.data)
}, onGetUserError)
}
- 能让人秒懂
命名应该符合英语习惯
- 普通变量用名词
- 复数要加s或者对应的复数形式
- 布尔用isXXX或canXXX或形容词
- 禁止用showDialog表示是否展示dialog
- 普通函数用动词开头 //get,do
- 钩子函数用介词加动词开头 //onError,onLoad
- 容易混淆的对象加前缀,如$div
- 不要用缩写
- 如cnt/idx/cur/prev/anal
- 某些特定的缩写可以用,比如for循环里的i j k
- 行业通用缩写一个单词,如enableHtml