当初读动物书,有一种崇拜的感觉
前言
整体来说,《重构 JavaScript》对从刚入门到有些许开发教训的人,都有受害的中央。
后面讲述了在 JavaScript 里重构是一个什么概念,你应该怎么抉择、学习和应用 JavaScript,以及讲测试对重构的重要性;两头讲述了重构的指标、要留神的构造和一些值得注意的点;最初提到了一些异步、模式和函数式编程的思路。
能够这样形容:有一个密室,给你一些物品,而后从上帝视角通知你物品的作用,以及你能够抉择或参考的路线,也包含你可能走过的谬误路线剖析,最初通知你如何走的更丑陋。
其中比拟有感触的中央就是:要置信你的代码,不要胆怯测试,遵循一些特定的标准和模式,就能够把你的代码重构上来,如果违心再学习一些新的思路,你的代码会更丑陋,你的我的项目会更强壮,你的技术(包含思维)会有质的飞跃。
介绍
下图是一张图书简介(取自某个在线商城):
摘录
以下是文章里的一些摘录,个人感觉有很多值得学习和思考的中央,当然其中也有集体了解的成分。(局部专业术语没有做具体的介绍,因为太多了 ……)
第 1 章:重构是什么?
- 当咱们进行测试时,咱们有 足够的信念 重构代码并扭转实现。如果没有这些测试,咱们就是把咱们真正关怀的行为(输出和输入)置于危险之中。
- 性能(和其余非功能性方面)是咱们决定围绕它创立冀望和测试的主要问题。
- 在过来的 20 年里,一个风行的比喻是 技术债。
-
高质量的代码个别都有以下准则:
- SOLID:繁多职责准则,开闭准则,里氏替换准则,接口隔离准则,依赖反转准则。
- DRY:不做反复的事。
- KISS:放弃简略间接。
- GRASP:通用职责调配软件模式。
- YAGNI:你不会须要它。
- 将人的可读性视为品质
- 重构即摸索
第 2 章:你应用哪种 JavaScript?
-
我应该应用哪个框架?
这是 JavaScript 开发者常常提出的一个问题,而且可能是来自新开发人员最大的 问题,“我应该学习哪种语言?”框架限定的工作形式能够给程序员一种他们 真的晓得所有的感觉。用夸大甚至矛盾的要求来形容工作没有什么用。当波及 JavaScript 时有很多框架、平台和最终不同类型的代码,你可能都会写到,这个 问题的某些模式会一次又一次地呈现。
最初,你不可能学会所有 。如果你有一个工作或指标工作真正须要某些技能,首 先花工夫在那些事下面。如果你心中没有一份特地的工作, 去团聚找敌人和导师 , 并跟着他们做 。或者,如果你只想学习你感兴趣的货色, 抉择一些看起来很酷的 货色 ,而后 深刻进去,继续前进,在某个时候,考愿娴熟把握这些技术。
你能够在语言、框架、测试库或乐器上利用雷同的过程(依照工作要求、敌人在 应用的和你认为酷的进行过滤)。在所有这些中,偶然深刻,如果你原谅一些粗 鲁的倡议,请留神哪里钱多。
“看起来很酷”可能听起来很含糊,的确如此。对我来说,这意味着要找到最新 奇或者最令人费解的技术。我不太可能学习 14 种解决雷同问题的变体。对一些 人来说,酷意味着新和时尚。对其他人来说,它意味着受欢迎或有利可图。如果 你不晓得“看起来很酷”对你来说意味着什么,那就用一些可能性来解决这个问 题,而不是花太多工夫思考抉择哪一个。
- 框架 这个术语被看得过重了。
第 3 章:测试
-
对于最初一个援用。
测试不是个问题。这种景象暗示了 这是一个不足领导力的小型或缺乏经验团队。
可怜的是,如果你在一个都是鲁莽的人的团队中(这些程序员只是堆砌代码,而不器重品质和测试),最可能的后果是挫败感和不可预测的毁坏(以及不可预知的工夫)。
“立刻来到这个不好的团队”不是惟一的答案,因为在这种状况下可能还有其余的益处和限度。然而 一些注重质量的我的项目往往有更好的稳定性(更少的颠覆重来),更好的薪酬和更多学习的机会。
失常的老板或客户不会回绝任何对软件是否失常工作的验证。
- 就像伊索寓言里的狐狸一样,没有抓到葡萄的时候,就说它们肯定是酸的。如果保障软件品质的测试是很难的,那就肯定是不重要的,对吗?这可能对让你面对人生中你无法控制的遗憾和悲观是有帮忙的 ,但如果没有意识到测试的益处,你就无奈以一个齐全不同的形式来写代码。 葡萄不是酸的,不要像那只狐狸一样,你是能够找到一个梯子实现的。
- 测试的次要目标是对代码有信念。 这种信念不是凭空产生的。它是由看到谬误和抵制变动的代码而产生的狐疑中造成的。信念是测试什么和如何测试的最佳指标。理解测试的最大起因是帮忙你在查看代码库时建设自信和狐疑感。
- 每个测试方法都有三个阶段:设置、断言和回收。
第 4 章:测试实际
- 在 TDD(测试驱动开发)中,能够应用 红色 / 绿色 / 重构 周期来测试代码,换句话说:“测试失败,测试胜利,优化之”。
- 在任何状况下,请放弃
git commit
命令之间的步骤很小,以便你能够很容易回滚到洁净的版本。
第 5 章:根本重构指标
- 相比只返回
undefined
,返回this
将提供更多的信息和更好的接口。 - 现实状况下,副作用 越少越好,如果必须存在,应该尽可能做到隔离。
IIFEs
没有名字,也不能被寻址。- 类有更多的个性,这些个性形成了独特的结构,而不仅仅是构造函数的“语法糖”。
- JavaScript 在 OOP 上翻了一番,函数式编程可能是 JavaScript 的“将来”,但至多 OOP 也是将来。
- 尽量减少块(复杂度和代码行数)。
- 尽量减少输出的总数。
- 多应用显示输出。
- 相比副作用,多应用实在有意义的返回值。
- 将副作用升高到最小甚至不存在。
第 6 章:重构根本构造
- 重命名 可能是件小事。
- 正文 有时候能够用作文档,甚至能够建设内部文档。
- “提取”是一种特定类型的“引入”,有时候它比函数更适合。
- 要留神 变量晋升。
-
“for in”有点像咱们的 for 和 while 循环,然而咱们没有解决索引更新,所以你能够把它看成“for 索引 in”。
- for…in 中的索引不保障按程序。
- 任何可枚举的属性都将被枚举,数组能够从其余中央继承“enumerable”属性。
- 在 for…in 循环中批改数组可能会导致混同。
第 7 章:重构函数与对象
- 映射(Map)是为了实现更轻量级的“键和值”。
-
WeakSet
和WeakMap
与它们的“强”版本的次要区别是:- 它们不能被迭代(没有
forEach
函数)。 - 它们没有获取容器大小的援用。
- WeakSet 不能存储根本类型数据。
- 他们很“弱”地治理它们的键。也就是说,当键没有任何援用的时候能够被垃圾回收。
- 它们不能被迭代(没有
- 应用“弱”模式时,你放弃了容易理解外部是什么或将函数利用到整个汇合的能力。而你失去的是对内存透露和隐衷的管制。
- 倡议将 if 中多个布尔值的判断放到一个函数的返回值中。
- 尽量放大全局变量的作用域,最好能够设计咱们的 API。
第 8 章:层次结构中的重构
- 要构建好逻辑的层次结构,尽量隔离。
- 构造函数常常会在原型上搞事件,所以不要它不是很好用,能够应用对象字面量和工厂函数来代替。
- 思考好
Is-A
和Is-Just-A
。
第 9 章:重构到面向对象模式
- 状态模式 的外围是违心将可能被认为是“属于”某个对象的局部挪动到另一个对象中。OOP(面向对象编程)中有一种偏向,行将层次结构放在委托对象的优先级之上。
- 装璜器 次要体现在将个性增加到现有的接口(实例)中。
- 外观(对象字面量的形式来定义)看起来很简洁,害处是不容易保护。
第 10 章:重构异步
- 将“回调天堂”变成 流式 API,这种格调叫 CPS(连续传递格调)。
Promise
的价值在于它们扭转了接口,而这些可能就是你心愿进行测试的中央。
第 11 章:函数式重构
- 在 FP(申明式编程)中,咱们应该试图去强调,形容一个程序应该做什么,而不是应该怎么做。
- 纯函数的益处是幂等性,也就是作用域够小并且不能扭转时,你能够总是置信同样的参数进去,返回的后果是一样的。另一个益处就是不产生副作用。
- 柯里化、函数组合是个好想法。
心愿大家都能够成为心目中的大佬!