本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。
【关于本书】
本书旨在告诉你如何使用类型系统编写更好、更安全的代码。虽然大部分介绍类型系统的图书更加关注形式方面的讨论,但本书采用了偏向实用的做法。本书包含你在日常工作中可能遇到的许多示例、应用和场景。
【读者对象】
本书主要针对想要学习类型系统的工作原理以及使用类型系统来提高代码质量的程序员。你应该具备一些使用面向对象编程语言(如Java、C#、C++或JavaScript/TypeScript)的经验,还应该有一些软件设计经验。虽然本书的代码示例是基于TypeScript的,但是大部分内容是普遍适用的。事实上,本书的代码示例并非总是使用TypeScript特有的功能。在编写代码示例时,我尽可能让熟悉其他编程语言的程序员也容易理解它们。虽然本书会介绍各种技术来帮助你编写健壮的、可组合的、封装程度更好的代码,但是也假定了你知道为什么我们希望获得这些特性。此外,本书侧重类型系统的实际应用,因此涉及的数学理论较少,但是你应该熟悉基本的代数概念,如函数和集合等。
【本书的组织方式】
本书包含11章,涵盖类型编程的各个方面。
第1章介绍类型和类型系统,讨论它们为什么存在以及为什么有用。我们将讨论类型系统的类型,并解释类型强度、静态类型和动态类型。
第2章介绍大部分语言中都有的基本类型,以及在使用这些类型时需要注意的地方。常用的基本类型包括空类型、单元类型、布尔类型、数值类型、字符串类型、数组类型和引用类型。
第3章介绍组合,包括把类型组合起来定义新类型的各种方式,还介绍实现访问者设计模式的不同方式,并定义代数数据类型。
第4章讨论类型安全—如何使用类型来减少歧义以及防止错误。本章还介绍如何使用类型转换在代码中添加或移除类型信息。
第5章介绍函数类型,以及当我们获得了创建函数变量的能力后能够做些什么,还展示实现策略模式和状态机的不同方式,并介绍基本的map()、filter()和reduce()算法。
第6章以前一章为基础,展示函数类型的一些高级应用,包括简化的装饰器模式、可恢复的函数和异步函数。
第7章介绍子类型,并讨论类型兼容。我们会看到顶层类型和底层类型的应用,以及从子类型的角度看,和类型、集合和函数类型之间的关系。
第8章介绍面向对象编程的关键元素,以及什么时候使用每种元素,并讨论接口、继承、组合和混入。
第9章介绍泛型编程及其第一种应用—泛型数据结构。泛型数据结构把数据的布局与数据本身分隔开。迭代器支持遍历这些数据结构。
第10章继续介绍泛型编程,讨论泛型算法及迭代器的分类。泛型算法是能够在不同数据类型上重用的算法。迭代器用作数据结构和算法之间的接口,并且能够根据迭代器的能力启用不同的算法。
第11章介绍高阶类型、函子和单子的概念,以及如何使用它们,并为进一步学习提供一些建议。
本书中的各章以前面章节中的概念作为基础,故建议读者按顺序阅读。虽然如此,但是本书介绍的4大主题相对独立:前4章介绍基础知识;第5~6章介绍函数类型;第7~8章介绍子类型;第9~11章介绍泛型编程。
本书为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。 本书以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇?一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。
Github | Docker | Project
本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。