提升代码最有效的方式是反反复复地推敲代码,
- 过几个星期或者几个月再回头来看。
if else
- if语句总有两个分支,else可能还出现重复代码,可以嵌套和缩进,但是是清晰和严密的。
- 大量的截断写法和零散的if逻辑会让代码难以维护。
- 无懈可击。// both template & js
模块化
- 搞一个文件夹叫做module并不是模块化,真正的模块化不是文本上的区分,而是逻辑上的区分。
- 要定义清楚输入和输出,要分析清楚真正的依赖是什么,能知道什么,不能知道什么。
- 函数体避免过长。(一屏)
- 定义工具函数。
- 每个函数做到职责单一。
- 避免通过全局变量或者外层的变量来传递信息。// global vs state management
可读代码
- 函数和变量的命名。(sth. doSth.)
- 局部变量应该定义接近在在调用它的地方。
- 局部变量名字可以简短。// let age = getAgeFrom(user); let userAge = getAgeFromUser(user);
- 不要重用局部变量。// 可以使用IIFE
- 复杂表达式做成中间变量。// if ((xxx && yyy) || (mmm && nnn)) {...} => const isValid = (xxx && yyy) || (mmm && nnn); if (isValid) {...}
- 合理的换行和空行。
- code standard(lint) sometimes is evil
simple & stupid // KISS
- 并不是语言或框架提供给你的特性就一定是对的。
- 盲目的追求“短小”和“精悍”,或者为了显示自己头脑聪明,学得快,所以喜欢利用语言里的一些特殊构造,写出过于“聪明”,难以理解的代码。
- 不要省略花括号。
- 不要使用&&和||来控制代码执行流程。 if (a() || b() && c()) { ... } if (!a()) { if (b()) { c(); } }
注释和代码
- code tell you what
- comment tell you why
Some thoughts
- 写代码时时刻设想你就是将来要来维护这坨代码的人。// Maintainence、Project vs Product
- 先弄清楚问题是什么,再解决问题。// Code is the last step
- 不要过早优化。
Duplication && Abstraction
- DRY
- The rule of three
- Inheritance
Value object concept
Different Level
- system level & application level
- low level & high level
- api level & business logic level
Engineer
- 工程的本质,并不是去创造什么,而是去风险化,如何低成本、高效率、按时按量地完成既定的任务。
- 好的解决方案不一定要采用最新的技术和框架,而是体现在实现的细节中,朴实无华但又足见功底,所以放下浮躁的心,放下对那些所谓新技术的追逐,扎实打磨基础,反复推敲方案,选择合适的技术去解决问题。