首页 > 编程语言 >读编程与类型系统笔记01_类型简介

读编程与类型系统笔记01_类型简介

时间:2023-01-08 20:13:51浏览次数:47  
标签:5.1 01 编程 6.2 6.1 类型 2.2 隐式

1. 引子

1.1. 1999年发射的火星气候探测者号(Mars ClimateOrbiter)进入火星轨道的过程中失去联络

1.2. 原因

1.2.1. Lockheed(洛克希德·马丁公司)开发的一个组件使用磅力秒(美国单位,可简写为lbfs)来测量动量,而NASA开发的另外一个组件则使用牛顿秒(动量的公制单位,可简写为Ns)来测量动量。

1.3. 如果为这两种测量结果使用不同的类型,本可以避免这场灾难

2. 类型

2.1. 对数据做的一种分类

2.2. 定义了

2.2.1. 能够对数据执行的操作

2.2.2. 数据的意义

2.2.3. 允许数据接受的值的集合

2.3. 简化

2.3.1. 类型视为集合

2.3.2. 代表该类型的实例能够接受的所有可能的值

3. 类型系统

3.1. 一组规则

3.2. 分配类型

3.2.1. 程序员在代码中指定类型

3.2.2. 根据上下文隐式推断

4. 类型检查

4.1. 确保程序遵守类型系统的规则

4.2. 失败

4.2.1. 编译失败

4.2.2. 运行时错误

4.3. 形式理论证明

4.3.1. 柯里–霍华德(Curry-Howard)对应

4.3.1.1. 为“程序将正确运行”这种保证带来了逻辑上的严谨性

4.3.2. 类型视为一个逻辑命题,将从一个类型得到另一个类型的函数视为逻辑蕴含

4.3.3. 类型的一个值相当于证明命题为真的一个证据

5. 类型的主要优点

5.1. 正确性

5.1.1. 行为符合规范

5.1.2. 产生期望的结果

5.1.3. 不会导致运行时错误或崩溃

5.1.4. 用处

5.1.4.1. 消除坏状态

5.1.4.1.1. 限制变量能够取到的值的数量,从而减小状态空间

5.1.4.2. 消除代码中的轻微bug

5.1.4.2.1. 运行时错误转换成编译时错误,能够使代码更容易维护、适应性更强

5.1.4.3. 安全性

5.1.4.3.1. 阻止恶意攻击

5.2. 不可变性

5.2.1. 并发时

5.2.1.1. 数据不可变,就不会发生数据竞争

5.2.2. 常量性

5.2.2.1. 类型系统一个属性

5.2.2.2. 只对编译器有意义

5.3. 封装

5.3.1. 隐藏代码内部机制的能力

5.3.2. 将非公有信息限制在一个边界内

5.3.2.1. 保证外部代码不能修改这些信息

5.3.3. 代码两部分之间的关系越弱,共享的信息就越少

5.3.3.1. 内部数据越安全

5.4. 可组合性

5.4.1. 能够进行抽象,然后混合搭配组件,就减少了大量的重复代码

5.4.2. 不同部分是松散耦合的

5.4.3. 独立的组件组合起来,能够得到模块化系统

5.4.4. 每个子系统中的代码不会重复

5.5. 可读性

5.5.1. 读代码的时间往往比写代码的时间更多

5.5.2. 类型允许我们指定约束

5.5.3. 类型推断

5.5.3.1. 如果我们想明确表达意图,使阅读代码的人清晰地知道是什么类型,则可以自己指定类型

5.6. 优秀的软件设计和行为的根本特性

6. 类型系统的类型

6.1. 主要区别

6.1.1. 检查类型的时机

6.1.1.1. 在编译时检查类型

6.1.1.1.1. 静态类型

6.1.1.2. 类型检查推迟到运行时

6.1.1.2.1. 动态类型

6.1.2. 检查的严格程度

6.1.2.1. 做很少的(甚至不做)隐式类型转换

6.1.2.1.1. 强类型

6.1.2.2. 允许更多隐式类型转换

6.1.2.2.1. 弱类型

6.2. 弱类型

6.2.1. 隐式地尝试将值从其实际类型转换为使用该值时期望的类型

6.2.2. 隐式类型转换很方便

6.2.3. 隐式类型转换很危险

6.2.4. JavaScript是弱类型的

6.2.4.1. ==检查两个值是否相等

6.2.4.1.1. "42" == 42

6.2.4.2. ===检查值是否相等,以及值的类型是否相同

6.2.4.2.1. "42" === 42

6.3. 强类型

6.3.1. 不允许比较不同类型的值

6.3.2. 为其认为安全的转换提供有限的隐式转换

6.3.2.1. 转换为boolean

6.3.2.1.1. 0视为false,将其他任意数字视为true

6.3.2.2. 拓宽转换

6.3.2.2.1. 8位整数转换为16位整数

6.4. 强度在一个范围内:执行的隐式转换越多,该类型系统就越弱

标签:5.1,01,编程,6.2,6.1,类型,2.2,隐式
From: https://www.cnblogs.com/lying7/p/17035226.html

相关文章

  • python中的容器类型(2)
    Python中的容器类型(2) python中的容器类型包含字符串(str),元组(tuple),列表(list),集合(set)等类型。接下来是对集合(set),元组(tuple),字典的介绍。1.集合  集......
  • 2018年各大赛事题解
    大多数题解都是口胡,不保证正确性,有错请指出,谢谢。CQOI2018除了“交错序列”和“九连环”两道数学题以外,全是板子题,遭不住了。破解D-H协议BSGS板子题,时间复杂度\(\m......
  • 场景编程集锦 - 吉米的总统梦想
    1.场景描述  吉米是太平洋岛国一个贫苦家庭的孩子,他的梦想就是当总统,引领国家走向富强之路。  开学的第一堂课上,老师用白色的粉笔在黑板上写下了“我的梦想”,同学们......
  • 20230103动态class 是什么
    动态class怎么理解? 动态class 开发常用吗?常用呀。写组件的时候常用,还有主题换肤常用,变量控制切换样式常用。有些很难改的组件样式,通过动态class很简单就改变样式了,比......
  • 数据类型及扩展
    浮点数扩展floatf=0.1f;//输出0.1doubled=1.0/10;//输出0.1System.out.println(f==d);//输出falsefloatd1=12345678;doubled2=d1+1;System.out.pr......
  • 【Python】输入并查看数据类型
    print(type(1))----返回intprint(type('您好'))----返回str字符串print(type(0>1))------返回bool布尔类型print(type(3.145))------返回float浮点类型prin......
  • java并发编程_线程
    创建进程方式1,start一个新的线程,启动线程后回调newRunnable中的run方法,run方法调用结束后,JVM等待回收线程。publicclassFutureTaskOne{publicstaticvoidmai......
  • 01_string
    assertasserttruecanpassthetestassert_equalfalse,falseBothareequaltopassthetesttrueorfalseEverythingwillbetreatedastrueexceptfalsea......
  • 使用C语言编程的7个步骤
    版权声明©本文作者:main工作室本文链接:https://www.cnblogs.com/main-studio/p/17034891.html版权声明:本文为博客园博主「main工作室」的原创文章,遵循署名-非商业性......
  • 1010.请求与响应
    一、HttpResquest对象HttpRequest对象:服务器接受到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块定义了HttpRe......