读编程与类型系统
文章平均质量分 86
读编程与类型系统Programming with Types: Examples in TypeScript笔记、总结与感想
躺柒
书既可以读薄也可以读厚
1. 输出才能检验输入;
2. 分享才能集思广益;
3. 完成才能完善,无限完善才能逼近完美;
4. 万事开头难,坚持更难,长期坚持难上加难。
展开
-
编程与类型系统读后总结与感想
不论类型是否常见,讲其然,也讲其所以然。个人觉得比较重要的类型如下:空类型单元类型可选类型和类型Either类型变体类型。原创 2023-01-25 07:15:00 · 40 阅读 · 1 评论 -
读编程与类型系统笔记01_类型简介
1999年发射的火星气候探测者号(Mars ClimateOrbiter)进入火星轨道的过程中失去联络。运行时错误转换成编译时错误,能够使代码更容易维护、适应性更强。如果为这两种测量结果使用不同的类型,本可以避免这场灾难。强度在一个范围内:执行的隐式转换越多,该类型系统就越弱。限制变量能够取到的值的数量,从而减小状态空间。0视为false,将其他任意数字视为true。优秀的软件设计和行为的根本特性。确保程序遵守类型系统的规则。8位整数转换为16位整数。转载 2023-01-08 07:15:00 · 50 阅读 · 0 评论 -
读编程与类型系统笔记02_基本类型
首选按照开销最小到开销最大的顺序来排列条件转载 2023-01-09 07:15:00 · 59 阅读 · 0 评论 -
读编程与类型系统笔记03_组合
组合一个或多个类型将得到一个新类型,其值为组成类型的全部可能的组合转载 2023-01-10 07:15:00 · 43 阅读 · 0 评论 -
读编程与类型系统笔记04_类型安全
正确使用时,强制转换是一种很强大的技术,允许我们改进值的类型。把值声明为基本类型,并对其意义做一些隐含的假定时。定义类型来显式捕捉值的含义,从而避免错误解释值。类型检查器忘记了我们在赋值时提供的类型。如:8位无符号整数转为16位无符号整数。基本类型不允许我们直接施加某些限制。构造函数不应该做太繁重的工作。在运行时存储额外的类型信息。在类型系统之外跟踪类型。转载 2023-01-11 07:15:00 · 50 阅读 · 0 评论 -
读编程与类型系统笔记05_函数类型
8.2.2.4.2.1.1. 接受一个实参并返回一个boolean的函数。可以传递函数而不是传递实际的值,并在需要值的时候调用这些函数。接受一个或多个非函数实参并返回一个非函数类型的“标准”函数。将函数赋值给变量,并像处理类型系统中的其他值一样处理它们。状态和转移作为一个单独的枚举进行维护,有不同步的风险。该实参函数接受项目T作为实参,并返回U类型的一个值。函数的实参类型和返回类型决定了函数的类型。两个函数接受相同的实参,并返回相同的类型。定义:把所有接受或返回其他函数的函数。转载 2023-01-12 07:15:00 · 44 阅读 · 0 评论 -
读编程与类型系统笔记06_函数类型的高级应用
通过then()链接到该promise的其他所有promise都会被拒绝。 当前的promise会被拒绝。对于运行时间长,但是不能被拆分为多个操作的任务,效果不好。接口声明了多个方法,就无法使用一个函数类型来替代接口。装饰的对象可以执行其原始实现没有提供的功能。I/O操作等待数据时让它们排队的效果很好。不需要同步,因为所有代码在一个线程上运行。按顺序运行代码可能导致不可接受的延迟。扩展对象的行为,而不必修改对象的类。CPU密集的操作会造成阻塞。转载 2023-01-13 07:15:00 · 41 阅读 · 1 评论 -
读编程与类型系统笔记07_子类型
一个类型的结构与另一个类型相似(具有相同的成员,可能还有额外的成员),自动被视为后者的子类型。在期望类型T的实例的任何地方,都可以安全地使用类型S的实例,则类型S是类型T的子类型。Variant能够封装几个类型中某个类型的值,但是它本身不是其中任何一个类型。即使类型不在我们的控制范围内,我们在类型之间仍然能建立关系。只有当我们确认一个值具有某个类型时,才能把该值用作该类型。会绕过类型检查立即把该值用作其他任何类型的值。显式声明一个类型是另一个类型的子类型。父类型比子类型的类型更多。转载 2023-01-14 07:15:00 · 54 阅读 · 1 评论 -
读编程与类型系统笔记08_面向对象变成的元素
不是把几个组件合并到一起,而是封装一个组件,并提供它需要的“胶水”代码,使其能够作为另外一种类型使用。与继承不同,使用混入时,我们为不同的行为方面定义不同的类型,然后把它们合并起来,放到一个完整的类型中。除非两个类型之间存在清晰的“是一个”关系,否则组合是可以默认使用的好方法。合并接口的能力允许我们从较小的、可重用的接口创建合并后的接口。让子类是具体类,让层次结构上方的父类是抽象类,这是一个好主意。不修改类型,而是使用封装和组合让类型适配不同接口的一个例子。接口最终让消费者受益,而不是让实现接口的类获益。转载 2023-01-15 07:15:00 · 43 阅读 · 1 评论 -
读编程与类型系统笔记09_泛型数据结构
恒等逻辑与getNumbers()和assembleWidgets()的问题域解耦,因为恒等逻辑和问题域是正交的,或者说是独立的。数据结构把形状赋予数据,而并不需要知道这些数据是什么, 使这些结构成为泛型,就允许为各种值重用形状,从而大大减少需要编写的代码量。是一个可恢复的函数,使用yield语句返回控制权,并且当再次被调用时,会从上一次离开的状态恢复执行。一个泛型名称的标识符,用作客户端在创建泛型实例时指定的具体类型的占位符。当处理没有赋值的情况时,使用的逻辑与该值的实际类型并没有关系。转载 2023-01-17 07:15:00 · 47 阅读 · 3 评论 -
读编程与类型系统笔记10_泛型算法和迭代器
一旦要求泛型类型上必须有特定成员,就使用约束将允许类型的集合限制为具有必要成员的那些类型。C#提供了扩展方法,可以用来向类或接口添加方法,而不必修改其代码。当函数的实参趋近于特定值n时,执行该函数需要的时间和空间的上界。为功能较少的迭代器提供了更加通用的、效率相对较低的实现。为功能较多的迭代器提供了更加高效的、没那么通用的实现。约束告诉编译器某个类型实参必须具有的能力。转载 2023-01-18 07:15:00 · 70 阅读 · 0 评论 -
读编程与类型系统笔记11_高级类型及其他
对于任何泛型类型,以Box为例,如果map()操作接受一个Box和一个从T到U的函数作为实参,并得到一个Box,那么该map()就是一个函子。TypeScript、C#或Java中没有一种好的方式来表达高阶类型,所以我们不能通过使用类型系统表达一个函子的方式来定义结构。范畴论是数学的一个分支,研究的是由对象及这些对象之间的箭头组成的结构。T或Box有一个类型参数T,后者又有一个类型参数U。在Box上应用函数T => Box,返回一个Box转载 2023-01-19 07:15:00 · 58 阅读 · 1 评论