零、前言

JavaScript 是一种混乱但优雅的语言,它发现自己处于历史上最伟大的软件变革之一的中心。 它现在是主要的编程语言,用来在最普遍的平台上传递用户体验:网络

这种巨大的责任意味着 JavaScript 语言必须在需求不断变化的时期快速发展。 对于崭露头角的 JavaScript 程序员或 web 开发人员来说,这些变化意味着该语言及其生态系统变得越来越复杂,难以掌握。 如今,可用的框架和库的绝对数量是压倒性的,即使对那些已经在这个行业工作多年的人来说也是如此。

本书的任务是揭开世界上放置在语言之上的令人困惑的层和概念,揭示其潜在的本质,并考虑我们如何使用它来编写可靠和可维护的代码,并关注可用性。 我们将以一种非常基本的方式,从缩小和考虑我们为什么要写代码开始。 我们会发现,我们编写的代码并不存在于真空中。 我们将探讨我们的代码对用户和其他程序员产生巨大影响的大大小小的方式,并讨论如何适应他们的各种需求。

除了对干净编码原则的基本探索,我们还将深入研究 JavaScript 本身,从最原子的语法到更抽象的设计模式和约定,指导您了解该语言。 我们还将探讨如何以尽可能干净的方式记录和测试代码。 您应该牢牢掌握了 JavaScript 语言,并对什么是干净的代码有了合理的理解。

这本书是给谁的

本书适合任何有兴趣提高 JavaScript 技能的人。 无论你是业余爱好者还是专业人士,这本书的某些方面都会让你觉得有价值。 在技术知识方面,本书假设读者有一定的编程经验,至少对 JavaScript 本身有一定的经验。 从这本书中获得最大价值的读者是那些已经用 JavaScript 编写了几个月或几年的程序,但总是被它的复杂性所拖累,不确定如何编写干净且无 bug 的 JavaScript 的人。

这本书的内容

第 1 章Setting the Scene,让你思考我们为什么要写代码,并探索了我们通过代码传达意图的多种方式。 本章提供了一个坚实的基础,在此基础上,您可以构建和调整对干净代码的理解。

第二章干净代码的原则,使用真实的 JavaScript 示例来探讨干净代码的四个原则:可靠性、效率、可维护性和可用性。 这些重要的原则都是本书其余部分的基础。

第 3 章干净代码的敌人,揭示了一些更臭名昭著的干净代码的敌人。 这些都是导致不干净代码扩散的力量和动力,如自私自利的编程、糟糕的指标和货物崇拜。

第四章SOLID 和其他原则探讨了著名的 SOLID 原则,并通过将它们与函数式编程原则、得米特定律和抽象原则结合在一起来揭示其更深层次的含义。

第 5 章最难命名的东西,讨论了编程中最具挑战性的方面之一:命名事物。 它提出了一些命名的具体挑战,并将一个基础的命名理论与现实世界的命名问题和解决方案联系在一起。

第 6 章Primitive and embedded Types,开始了对 JavaScript 的深入探索。 本章详细介绍了 JavaScript 程序员可用的基本类型和内建类型,警告常见的陷阱并分享最佳实践。

第 7 章Dynamic Typing,讨论了 JavaScript 的动态特性,并讨论了与此相关的一些挑战。 它解释了我们如何干净地检测和转换为各种类型(通过显式强制转换或隐式强制转换)。

第 8 章操作符,详细介绍了 JavaScript 中可用的操作符,讨论了它们的行为和挑战。 这包括对每个操作符以及示例、陷阱和最佳实践的详细描述。

第 9 章部分语法和作用域,提供了更宏观的语言视图,突出显示更广泛的语法和可用的结构,如语句,表达式,块,和作用域。

第 10 章控制流,广泛地涵盖了控制流的概念,突出了命令式和声明式编程形式之间的关键区别。 然后探讨如何通过使用诸如调用、返回、屈服、抛出等控制移动机制来清晰地控制 JavaScript 中的流。

第 11 章设计模式,广泛探索了一些在 JavaScript 中使用的更流行的设计模式。 它描述了 MVC 和 MVVM 的主要架构设计模式,以及更模块化的设计模式,如构造器模式、类模式、原型模式和揭示模块模式。

第 12 章真实世界的挑战,着眼于 JavaScript 生态系统中的一些更现实的问题域,并考虑如何干净地处理它们。 涉及的主题包括 DOM 和单页应用、依赖项管理和安全性(XSS、CSRF 等)。

第 13 章The Landscape of Testing描述了测试软件的广泛概念,以及如何将这些应用到 JavaScript 中。 它特别探讨了单元测试、集成测试、端到端测试和 TDD。

第 14 章,编写清洁测试,进一步了作者建议你到域的测试断言和测试套件的方式完全清晰、直观,代表问题域和概念层次。

第十五章清洁代码的工具*,简要地考虑了几个可用的工具和开发流程,可以极大地帮助我们编写和维护干净的代码。 包括一些主题,如检测、格式、源代码控制和持续集成。

第十六章文档化您的代码,揭示了文档化的独特挑战。 本章要求您考虑所有可用的文档媒介,并要求您考虑我们如何理解和适应那些可能希望利用或维护我们代码的个人的需求和问题。

第 17 章Other Peoples' Code,探讨了在我们的 JavaScript 项目中选择、理解和使用第三方代码(如第三方库、框架和实用程序)所面临的挑战。 它还讨论了封装的方法,这些方法允许我们以一种干净的和最小伤害的方式与第三方代码进行接口。

第 18 章沟通和倡导探讨了在制作和交付清洁软件时,基于项目和人际关系所固有的更广泛的挑战。 这包括对以下内容的详细调查:计划和设置需求、沟通策略、识别问题并推动变革。

第 19 章案例研究,总结了 JavaScript 项目的开发,包括客户端和服务器端部分。 这一章总结了书中所支持的原则,并通过向您展示一个现实世界的问题领域和一个可用的解决方案的开发来确认这些原则。

才能充分利用这本书

为了最大限度地利用本书,对 JavaScript 语言有一个基本的了解,并至少对一个使用 JavaScript 的平台有一些经验是很有用的。 例如,这可能包括浏览器或 Node.js。

为了让你执行书中共享的代码,你有几个可用的选项:

  • 创建一个 HTML 文件与<script>,你可以放置任何 JavaScript 代码,你希望测试。 为了直观地观察输出,您可以使用alert()console.log()。 为了查看通过console.log()输出的值,您可以打开浏览器的开发工具。
  • 直接打开任何现代浏览器的开发工具,直接在 JavaScript 控制台中输入 JavaScript 表达式和语句。 在 Chrome 浏览器中可以找到这样做的指南:https://developers.google.com/web/tools/chrome-devtools/console/javascript
  • 创建一个test.js文件并通过 Node.js 运行它,或者使用 Node.js REPL 通过命令行交互测试不同的 JavaScript 语句和表达式。 一个全面的入门指南 Node.js 可以在这里找到:https://nodejs.org/en/docs/guides/getting-started-guide/

所有现代浏览器都可以访问浏览器开发工具。 快捷方式如下:

  • 在 Chrome:Ctrl++J 转变在 Windows 上或【显示】CMD+*+【病人】J 转变在 macOS 在 Firefox:Ctrl+转变+或【显示】F12 在 Windows 和 Linux,或CMD +【病人】选择+我在 macOS *在 IE 下:在 Windows 下【T3**

**建议你按照自己的节奏阅读这本书,如果你发现一个主题很难把握,可以在网上进行额外的研究和探索。 一些特别有用的资源包括:

随着你的阅读进度,这本书会逐渐变得更加详细,所以在后面的章节中放慢节奏是很自然的。 对于第 6-12 章来说尤其如此,这一章详细介绍了 JavaScript 语言本身的特性。

下载示例代码文件

你可以从你的账户www.packt.com下载这本书的示例代码文件。 如果您在其他地方购买了这本书,您可以访问www.packtpub.com/support并注册,直接通过电子邮件将文件发送给您。

您可以按照以下步骤下载代码文件:

  1. 登录或注册:www.packt.com
  2. 选择 Support 选项卡。
  3. 单击代码下载。
  4. 在搜索框中输入图书名称,并按照屏幕上的说明操作。

文件下载后,请确保使用最新版本的:

  • 解压缩的软件/ 7 - zip 窗口
  • Zipeg / iZip UnRarX Mac
  • 7 - zip / PeaZip Linux

本书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Clean-Code-in-JavaScript。 如果有对代码的更新,它将在现有的 GitHub 存储库中更新。

我们也有其他代码包从我们丰富的图书和视频目录,可在https://github.com/PacktPublishing/。 检查出来!

下载彩色图像

我们还提供了一个 PDF 文件,里面有本书中使用的屏幕截图/图表的彩色图像。 下载地址:https://static.packt-cdn.com/downloads/9781789957648_ColorImages.pdf

约定使用

本书中有许多文本约定。

CodeInText:文本码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 url、用户输入、Twitter 句柄。 下面是一个例子:“我们发现了一个名为shipping_address_validator的公开可用包,并决定使用它。”

*代码块的设置如下:

function validatePostalCode(code) {
  return /^[0-9]{5}(?:-[0-9]{4})?$/.test(code);
}

命令行输入或输出如下所示:

npm install --save react react-dom

加粗:表示新术语、重要单词或屏幕上看到的单词。 例如,菜单或对话框中的单词会像这样出现在文本中。 这里有一个例子:“为了便于我们的案例研究,这些植物的名称只以完整的拉丁名称存在,其中包括一个科(例如棘科)。”

Warnings or important notes appear like this. Tips and tricks appear like this.

取得联系

我们欢迎读者的反馈。

:如果你对这本书的任何方面有疑问,在你的信息的主题中提到书名,并在customercare@packtpub.com给我们发邮件。

勘误表:虽然我们已经采取了每一个小心,以确保我们的内容的准确性,错误确实发生了。 如果您在本书中发现了错误,请向我们报告,我们将不胜感激。 请访问www.packtpub.com/support/errata,选择您的书,点击勘误表提交表格链接,并输入详细信息。

:如果您在互联网上发现任何形式的我们的作品的非法拷贝,请您提供我们的地址或网址,我们将不胜感激。 请通过copyright@packt.com与我们联系,并提供材料链接。

:如果你有兴趣成为一名作家,如果你对某一话题有专长,或者你有兴趣写一本书,请访问authors.packtpub.com

评论

请留下评论。 一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢? 潜在的读者可以看到并使用您的公正的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。 谢谢你!

如需了解更多信息,请访问packt.com。****