编程与类型系统

编程与类型系统

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

微软资深工程师撰写,从实际应用角度,系统阐述如何使用类型系统编写更好、更安全的代码。

内容简介

本书主要针对想要学习类型系统的工作原理以及使用类型系统来提高代码质量的程序员。读者应该具备一些使用面向对象编程语言(如Java、C#、C或JavaScript/TypeScript)的经验,还应该有一些软件设计经验。

虽然本书的代码示例是基于TypeScript的,但是大部分内容是普遍适用的。事实上,本书的代码示例并非总是使用TypeScript特有的功能。在编写代码示例时,作者会尽可能让熟悉其他编程语言的程序员也容易理解它们。

虽然本书会介绍各种技术来帮助读者编写健壮的、可组合的、封装程度更好的代码,但是也假定了读者知道为什么希望获得这些特性。此外,本书侧重类型系统的实际应用,因此涉及的数学理论较少,但是应该熟悉基本的代数概念,如函数和集合等。

作者简介

作者弗拉德·里斯库迪亚,Microsoft的首席软件架构师,领导开发了几个大型软件项目,并指导了许多初级软件工程师。曾管理Office授权团队,包括将Office授权栈重新设计为基于服务的模型,集成Windows开箱即用体验,并发布Office 2019。

章节目录

版权信息

Preface 前言

Acknowledgements 致谢

About this book 关于本书

Types and possible values 类型及可能的取值

Common algorithms 常用算法

第1章 类型简介

1.1 为什么存在类型

1.1.1 0和1

1.1.2 类型和类型系统的定义

1.2 类型系统的优点

1.2.1 正确性

1.2.2 不可变性

1.2.3 封装

1.2.4 可组合性

1.2.5 可读性

1.3 类型系统的类型

1.3.1 动态类型和静态类型

1.3.2 弱类型与强类型

1.3.3 类型推断

小结

第2章 基本类型

2.1 设计不返回值的函数

2.1.1 空类型

2.1.2 单元类型

2.1.3 习题

2.2 布尔逻辑和短路

2.2.1 布尔表达式

2.2.2 短路计算

2.2.3 习题

2.3 数值类型的常见陷阱

2.3.1 整数类型和溢出

2.3.2 浮点类型和圆整

2.3.3 任意大数

2.3.4 习题

2.4 编码文本

2.4.1 拆分文本

2.4.2 编码

2.4.3 编码库

2.4.4 习题

2.5 使用数组和引用构建数据结构

2.5.1 固定大小数组

2.5.2 引用

2.5.3 高效列表

2.5.4 二叉树

2.5.5 关联数组

2.5.6 实现时的权衡

2.5.7 习题

小结

习题答案

第3章 组合

3.1 复合类型

3.1.1 元组

3.1.2 赋予意义

3.1.3 维护不变量

3.1.4 习题

3.2 使用类型表达多选一

3.2.1 枚举

3.2.2 可选类型

3.2.3 结果或错误

3.2.4 变体

3.2.5 习题

3.3 访问者模式

3.3.1 简单实现

3.3.2 使用访问者模式

3.3.3 访问变体

3.3.4 习题

3.4 代数数据类型

3.4.1 乘积类型

3.4.2 和类型

3.4.3 习题

小结

习题答案

第4章 类型安全

4.1 避免基本类型偏执来防止错误解释

4.1.1 火星气候探测者号

4.1.2 基本类型偏执反模式

4.1.3 习题

4.2 实施约束

4.2.1 使用构造函数实施约束

4.2.2 使用工厂实施约束

4.2.3 习题

4.3 添加类型信息

4.3.1 类型转换

4.3.2 在类型系统之外跟踪类型

4.3.3 常见类型转换

4.3.4 习题

4.4 隐藏和恢复类型信息

4.4.1 异构集合

4.4.2 序列化

4.4.3 习题

小结

习题答案

第5章 函数类型

5.1 一个简单的策略模式

5.1.1 函数式策略

5.1.2 函数的类型

5.1.3 策略实现

5.1.4 一等函数

5.1.5 习题

5.2 不使用switch语句的状态机

5.2.1 类型编程小试牛刀

5.2.2 状态机

5.2.3 回顾状态机实现

5.2.4 习题

5.3 使用延迟值避免高开销的计算

5.3.1 lambda

5.3.2 习题

5.4 使用map、filter和reduce

5.4.1 map()

5.4.2 filter()

5.4.3 reduce()

5.4.4 库支持

5.4.5 习题

5.5 函数式编程

小结

习题答案

第6章 函数类型的高级应用

6.1 一个简单的装饰器模式

6.1.1 函数装饰器

6.1.2 装饰器实现

6.1.3 闭包

6.1.4 习题

6.2 实现一个计数器

6.2.1 一个面向对象的计数器

6.2.2 函数式计数器

6.2.3 一个可恢复的计数器

6.2.4 回顾计数器实现

6.2.5 习题

6.3 异步执行运行时间长的操作

6.3.1 同步执行

6.3.2 异步执行:回调

6.3.3 异步执行模型

6.3.4 回顾异步函数

6.3.5 习题

6.4 简化异步代码

6.4.1 链接promise

6.4.2 创建promise

6.4.3 关于promise的更多信息

6.4.4 async/await

6.4.5 回顾整洁的异步代码

6.4.6 习题

小结

习题答案

第7章 子类型

7.1 在TypeScript中区分相似的类型

7.1.1 结构和名义子类型的优缺点

7.1.2 在TypeScript中模拟名义子类型

7.1.3 习题

7.2 子类型的极端情况

7.2.1 安全的反序列化

7.2.2 错误情况的值

7.2.3 回顾顶层和底层类型

7.2.4 习题

7.3 允许的替换

7.3.1 子类型与和类型

7.3.2 子类型和集合

7.3.3 子类型和函数的返回类型

7.3.4 子类型和函数实参类型

7.3.5 回顾可变性

7.3.6 习题

小结

习题答案

第8章 面向对象编程的元素

8.1 使用接口定义契约

8.2 继承数据和行为

8.2.1 “是一个”经验准则

8.2.2 建模层次

8.2.3 参数化表达式的行为

8.2.4 习题

8.3 组合数据和行为

8.3.1 “有一个”经验准则

8.3.2 复合类

8.3.3 实现适配器模式

8.3.4 习题

8.4 扩展数据和行为

8.4.1 使用组合扩展行为

8.4.2 使用混入扩展行为

8.4.3 TypeScript中的混入

8.4.4 习题

8.5 纯粹面向对象代码的替代方案

8.5.1 和类型

8.5.2 函数式编程

8.5.3 泛型编程

小结

习题答案

第9章 泛型数据结构

9.1 解耦关注点

9.1.1 可重用的恒等函数

9.1.2 可选类型

9.1.3 泛型类型

9.1.4 习题

9.2 泛型数据布局

9.2.1 泛型数据结构

9.2.2 什么是数据结构

9.2.3 习题

9.3 遍历数据结构

9.3.1 使用迭代器

9.3.2 流线化迭代代码

9.3.3 回顾迭代器

9.3.4 习题

9.4 数据流

9.4.1 处理管道

9.4.2 习题

小结

习题答案

第10章 泛型算法和迭代器

10.1 更好的map()、filter()和reduce()

10.1.1 map()

10.1.2 filter()

10.1.3 reduce()

10.1.4 filter()/reduce()管道

10.1.5 习题

10.2 常用算法

10.2.1 使用算法代替循环

10.2.2 实现流畅管道

10.2.3 习题

10.3 约束类型参数

10.3.1 具有类型约束的泛型数据结构

10.3.2 具有类型约束的泛型算法

10.3.3 习题

10.4 高效reverse和其他使用迭代器的算法

10.4.1 迭代器的基础模块

10.4.2 有用的find()

10.4.3 高效的reverse()

10.4.4 高效地获取元素

10.4.5 回顾迭代器

10.4.6 习题

10.5 自适应算法

小结

习题答案

第11章 高阶类型及其他

11.1 更加通用的map

11.1.1 处理结果或传播错误

11.1.2 混搭函数的应用

11.1.3 函子和高阶类型

11.1.4 函数的函子

11.1.5 习题

11.2 单子

11.2.1 结果或错误

11.2.2 map()与bind()的区别

11.2.3 单子模式

11.2.4 continuation单子

11.2.5 列表单子

11.2.6 其他单子

11.2.7 习题

11.3 继续学习

11.3.1 函数式编程

11.3.2 泛型编程

11.3.3 高阶类型和范畴论

11.3.4 从属类型

11.3.5 线性类型

小结

习题答案

附录A TypeScript的安装及本书的源代码

附录B TypeScript速览表

编程与类型系统是2021年由机械工业出版社华章分社出版,作者[美] 弗拉德·里斯库迪亚。

得书感谢您对《编程与类型系统》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
自制编程语言 电子书
适读人群 :适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。 前百度高 级工程师、专业书《操作系统真相还原》的作者的又一力作 业界专家联名推荐 滴滴系统部技术高 级总监于晓声 阿里巴巴蚂蚁金服技术专家肖金亮 百度资 深运维工程师陈晓聪 360企业安全集团政企云事业部技术总监冯顾 ACFUN高 级运维总监陆景玉 Mobvista运维总监黄梦溪 手把手地教读者从零去实现一门语言,从原理到实践事无巨细 每一步都有实际的代码和详尽的原理说明,读者可以很轻松地掌握各个实现细节 实现脚本语言重要的垃圾回收(GC)、虚拟机(VM)和线程等黑技术都在本书一一呈现
Python编程基础 电子书
介绍了Python编程基础及其相关知识的应用,解决部分实际问题。
Python编程基础 电子书
全面介绍Python编程基础与实用技术。
推荐系统技术原理与实践 电子书
本书系统介绍推荐系统的技术理论和实践。首先介绍推荐系统的基础知识;然后介绍推荐系统常用的机器学习和深度学习模型;接着重点介绍推荐系统的4层级联架构,包括召回、粗排、精排和重排,以及谷歌、阿里巴巴等大型互联网公司在4层级联架构中的模型设计和实现原理;紧接其后介绍多目标排序在推荐系统中的应用,具体介绍阿里巴巴、谷歌等大型互联网公司的实践;最后从不同角度审视推荐系统,介绍公平性问题、知识蒸馏、冷启动等各
IT支撑系统与关键技术 电子书
电信运营商的IT支撑系统主要由面向客户服务和业务管理的业务支撑系统(BSS)、面向通信网络管理的运行支撑系统(OSS)、面向企业内部管理的管理支撑系统(MSS)等组成。本书介绍了电信运营商IT支撑系统的概念、标准、基础技术,阐述了运营商IT支撑系统的目标架构及演进策略,并分别介绍了三大IT支撑系统的主要功能、系统组成等。同时介绍了电信运营商发展大数据的优势、大数据关键技术及应用场景,以及电信运营商