文章目录
- 前言
- 问题引入
- 实现一个交通信号灯的状态切换
- 1.基本实现
- 2.状态封装实现
- 3.职责分离实现
- 求一个数是否是4的幂
- 1.基本实现
- 3.数学优化
- 洗牌算法
- 1.基本实现
- 2.均匀算法实现
- 总结
前言
课程重点:
- 代码规范相关事项
- 如何优化代码
问题引入
试看下面一段代码,请问它是一段好的代码吗?
如果是单纯从功能上来看的话,它不能说好,只能说是仅仅实现了基本功能而已。但是这段代码却是一段真实工程中的代码,因为在实际运行过程中,这段代码比起其他优化的写法要执行的更快。因此,从效率上考虑,最终采用了上述代码。实现一个交通信号灯的状态切换
1.基本实现
最基本的实现其实就是使用定时器进行嵌套,当然这也是一段经常被人诟病的名为“回调地狱”的代码,不仅代码本身非常的“丑”,并且还不易被其他人理解。当状态增加或减少时,需要直接改动核心代码。
2.状态封装实现
在上节的实现中,我们剖析出上节代码的问题在于:代码的可读性和可维护性不强。对此我们将状态和核心代码进行分离,当需要增加或者删除代码时,只对状态列表进行改动,而不需要对核心代码做任何修改。
3.职责分离实现
在上节中,我们增强了基本实现代码的可读性和可维护性,但是它还不能说是一段“好”代码。一段好的代码要满足的原则有很多,而我们接下来要说的就是“单一职责原则”,单一职责原则要求一个对象或方法只做一件事。回看第二种实现方法的代码,我们发现,在第二种实现方式的代码的核心方法中,它做了两件事情————改变状态和切换状态。因此我们进一步优化代码,就需要对这两个功能做拆分。
我们也可以使用异步函数实现上述代码,结构看起来会更加清晰。求一个数是否是4的幂
1.基本实现
最基本的实现当然是一个最常用的“算法”,暴力递推。因为如果一个数是4的幂次,那么他累除4的结果绝对是1,%4的结果绝对是0。
### 2.位运算优化 在上节代码之上做优化最基础的方法就是把数学计算都改成位运算。3.数学优化
通过数学归纳法,我们可以发现,4的幂 & 4的幂-1的结果绝对是0,并且4的幂 & 0xAAAAAAAA的结果也需要为0(因为2的幂次同样可以满足第一条规则)。
或者可以使用正则来实现。因为四的幂的二进制一定是一个1和n个00。
洗牌算法
1.基本实现
这是一段很常见的洗牌算法的实现,但它实际上并不均匀,因为sort方法的实现并不会让每个数都进行交换,因此这种实现是一种概率不均匀的洗牌选法。
2.均匀算法实现
这种实现方式取决于随机函数是否能保证对等概率,只要随机函数能保证对等概率,那么该算法也能保证平均。
总结
本节课主要介绍了有关JavaScript代码规范和优化相关的问题。
跟着月影大佬学习代码优化的过程非常的丝滑。