![](https://img2023.cnblogs.com/blog/3076680/202301/3076680-20230117090709842-240246320.png)
1. 恒等函数
1.1. 在代数中,恒等函数指的是函数f(x) = x
2. 类型参数
2.1. 将不同函数的区别,即它们的实参类型参数化
2.2. 一个泛型名称的标识符,用作客户端在创建泛型实例时指定的具体类型的占位符
3. 可选类型
3.1. 包含某个类型T的值,或者不包含任何内容
3.2. Optional实现
3.3. 当处理没有赋值的情况时,使用的逻辑与该值的实际类型并没有关系
4. 泛型函数 泛型类
4.1. 泛型函数(value:T) => T,它的类型参数是T
4.2. 当为T指定了实际类型时,就创建了具体函数
5. 泛型类型
5.1. 参数化一个或多个类型的泛型函数、类、接口等
5.2. 允许我们编写能够使用不同类型的通用代码,从而实现高度的代码重用
5.2.1. 让代码的组件化程度更高
5.2.2. 创建独立的、可重用的组件
5.2.3. 使用泛型来避免复制代码
5.2.3.1. 复制从来不是一个好的选择
5.3. Optional类型
5.3.1. 一个简单但是强大的泛型类型
6. 数据结构
6.1. 数据自身
6.2. 数据的形状
6.2.1. 二叉树中,以分层的方式布局数据,每个元素最多有两个子元素
6.2.2. 在链表中,数据是顺序布局的,一个元素在前一个元素的后面
6.3. 一组保留形状的操作
6.3.1. 用来添加或移除元素
6.4. 数据结构把形状赋予数据,而并不需要知道这些数据是什么, 使这些结构成为泛型,就允许为各种值重用形状,从而大大减少需要编写的代码量
6.5. 两个关注点
6.5.1. 数据
6.5.1.1. 数据的类型
6.5.1.2. 数据结构的实例保存的实际值
6.5.2. 数据的形状和保留形状的操作
6.5.3. 解耦关注点
7. 泛型数据结构
7.1. 如果能够从库中选择泛型数据结构,就应该使用库中的泛型数据结构
7.2. 处理数据的布局、形状和任何保留形状的操作
7.3. 数据布局的职责交给独立于任何实际数据内容的泛型数据结构
7.4. 与数据是什么没有关系
7.5. 不能解决全部问题
7.5.1. 仍然需要遍历它们
7.6. 对于分离独立的关注点很有用
8. 迭代器
8.1. 能够用来遍历数据结构的一个对象
8.1.1. 遍历策略和数据结构之间并不需要是一一对应的关系
8.1.2. 提供了一个标准接口,将数据结构的实际形状对客户端隐藏起来
8.1.2.1. 为遍历数据结构提供了公共接口
8.2. 把数据结构和算法连接起来的“胶水”
8.3. 迭代器模式十分有用,所以得到了原生支持
8.3.1. Java中的等效接口也叫作Iterator
8.3.2. 在C#中,等效的接口是IEnumerator
8.4. 在定义数据结构时,应该确保它实现了Iterable
8.5. Iterator代表一个迭代器
8.6. Iterable代表可迭代的东西
8.7. 使用生成器可实现迭代器
8.8. 并非必须是有限的,它们可以无限产生值
9. 生成器
9.1. 是一个可恢复的函数,使用yield语句返回控制权,并且当再次被调用时,会从上一次离开的状态恢复执行
9.2. 生成器返回一个IterableIterator,所以我们可以直接在for...of循环中使用它们,或者用它们来实现一个数据结构的Iterable接口
9.2.1. 大部分主流编程语言都有一个等效的特殊类型,用来支持一个能够遍历元素的for循环
9.3. 在实现遍历逻辑时,考虑使用yield
9.3.1. 它通常可以让代码变得更加整洁
9.3.2. Java中没有内置的yield语句
9.3.3. C#支持yield语句
10. 数据流
10.1. 无限数据流的例子
10.1.1. 从键盘读取字符
10.1.2. 从网络连接获取数据
10.1.3. 收集传感器数据
10.2. 把函数链接成处理管道,在可能无限的数据流上运行它们
11. 处理管道
11.1. 通过使用接受和返回迭代器的函数,能够构建处理管道
11.1.1. 一些函数,它们接受一个迭代器作为实参,进行一些处理,然后返回一个迭代器
11.1.2. 这种函数可以链接起来,在收到数据时处理数据
11.2. 反应式编程的基础
11.3. 迭代器是关键,因为它们使我们能够逐个处理值
11.4. 是延迟计算的
posted @
2023-01-17 09:08
躺柒
阅读(
58)
评论()
编辑
收藏
举报