展开全部

主编推荐语

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

内容简介

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

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

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

目录

  • 版权信息
  • 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速览表
展开全部

评分及书评

4.8
4个评分

出版方

机械工业出版社有限公司

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。