会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
躺柒
博客园
首页
新随笔
联系
订阅
管理
随笔 - 788
文章 - 0
评论 - 17
阅读 -
49126
读编程与类型系统笔记01_类型简介
合集 - 读编程与类型系统(12)
1.
编程与类型系统读后总结与感想
2023-01-25
2.
读编程与类型系统笔记01_类型简介
2023-01-08
3.
读编程与类型系统笔记02_基本类型
2023-01-09
4.
读编程与类型系统笔记03_组合
2023-01-10
5.
读编程与类型系统笔记04_类型安全
2023-01-11
6.
读编程与类型系统笔记05_函数类型
2023-01-12
7.
读编程与类型系统笔记06_函数类型的高级应用
2023-01-13
8.
读编程与类型系统笔记07_子类型
2023-01-14
9.
读编程与类型系统笔记08_面向对象变成的元素
2023-01-15
10.
读编程与类型系统笔记09_泛型数据结构
2023-01-17
11.
读编程与类型系统笔记10_泛型算法和迭代器
2023-01-18
12.
读编程与类型系统笔记11_高级类型及其他
2023-01-19
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.
强度在一个范围内:执行的隐式转换越多,该类型系统就越弱
合集:
读编程与类型系统
好文要顶
关注我
收藏该文
微信分享
躺柒
粉丝 -
50
关注 -
0
+加关注
0
0
升级成为会员
«
上一篇:
读C#代码整洁之道笔记07_代码评审和集成测试
»
下一篇:
读编程与类型系统笔记02_基本类型
posted @
2023-01-08 19:58
躺柒
阅读(
49
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
相关博文:
·
读编程与类型系统笔记02_基本类型
·
读编程与类型系统笔记04_类型安全
·
TypeScript 语言
·
① 你好ts:进入类型的世界
·
【重点突破】—— Typescript走进类型的世界
阅读排行:
·
【.NET】调用本地 Deepseek 模型
·
CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
·
DeepSeek “源神”启动!「GitHub 热点速览」
·
我与微信审核的“相爱相杀”看个人小程序副业
·
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
公告
昵称:
躺柒
园龄:
2年1个月
粉丝:
50
关注:
0
+加关注
<
2025年2月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
合集
学信息系统项目管理师第4版(35)
学系统集成项目管理工程师(中项)(43)
读高性能MySQL(第4版)(21)
读发布!设计与部署稳定的分布式系统(第2版)(34)
随笔及总结(26)
读改变未来的九大算法(10)
读数据压缩入门(11)
读C#代码整洁之道(8)
读编程与类型系统(12)
读函数式编程思维(6)
读Java8函数式编程(9)
读Java实战(第二版)(20)
读Java性能权威指南(第2版)(31)
读SQL进阶教程(17)
选读SQL经典实例(23)
读SQL学习指南(第3版)(13)
读图数据库实战(11)
读程序员的制胜技(15)
读像火箭科学家一样思考(16)
读程序员的README(19)
读算法霸权(13)
读元宇宙改变一切(14)
读AI3.0(10)
读千脑智能(13)
读十堂极简人工智能课(9)
读人工不智能:计算机如何误解世界(10)
读算法的陷阱:超级平台、算法垄断与场景欺骗(20)
读所罗门的密码(21)
读天才与算法:人脑与AI的数学思维(26)
读人工智能时代与人类未来(19)
读AI未来进行式(12)
读AI新生:破解人机共存密码(18)
读人工智能全传(16)
读写给大家的AI极简史(7)
读零信任网络:在不可信网络中构建安全系统(21)
读软件开发安全之道:概念、设计与实施(17)
读软件设计的要素(7)
读构建可扩展分布式系统:方法与实践(16)
读数据湖仓(9)
读数据工程之道:设计和构建健壮的数据系统(34)
读数据质量管理:数据可靠性与数据质量问题解决之道(20)
读数据保护:工作负载的可恢复性(31)
读量子霸权(18)
读算法简史:从美索不达米亚到人工智能时代(15)
读当我点击时,算法在想什么?(7)
读DAMA数据管理知识体系指南(4)
更多
随笔档案
2025年2月(25)
2025年1月(31)
2024年12月(31)
2024年11月(30)
2024年10月(31)
2024年9月(30)
2024年8月(31)
2024年7月(31)
2024年6月(30)
2024年5月(31)
2024年4月(30)
2024年3月(31)
2024年2月(29)
2024年1月(31)
2023年12月(31)
2023年11月(30)
2023年10月(31)
2023年9月(30)
2023年8月(31)
2023年7月(31)
2023年6月(30)
2023年5月(31)
2023年4月(31)
2023年3月(36)
2023年2月(28)
2023年1月(26)
阅读排行榜
1. C#代码整洁之道读后总结与感想(599)
2. 选读SQL经典实例笔记01_检索和排序(369)
3. 读C#代码整洁之道笔记01_C#的编码标准和原则(311)
4. 读C#代码整洁之道笔记04_重构C#代码识别代码坏味道(309)
5. 学信息系统项目管理师第4版系列02_法律法规(268)
评论排行榜
1. 2023年1月随笔(11)
2. 2023年10月随笔之婚宴趣事多(2)
3. 读高性能MySQL(第4版)笔记12_查询性能优化(下)(2)
4. 读Java性能权威指南(第2版)笔记18_垃圾回收E(2)
推荐排行榜
1. 读高性能MySQL(第4版)笔记01_MySQL架构(上)(2)
2. 选读SQL经典实例笔记01_检索和排序(2)
3. 读软件设计的要素01概念(1)
4. 读AI未来进行式笔记01深度学习(1)
5. 读所罗门的密码笔记01_当人类遇见机器(1)
最新评论
1. Re:2023年10月随笔之婚宴趣事多
@gz4621 wondershare mindmaster...
--躺柒
2. Re:2023年10月随笔之婚宴趣事多
大神 思维导图用的什么软件制作的?
--gz4621
3. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
@东围居士 建议读新版。...
--躺柒
4. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
第4版相比第3版好像缩减了好多内容?楼主推荐第3版还是第4版
--东围居士
5. Re:读Java性能权威指南(第2版)笔记18_垃圾回收E
@屠炉 没有用第三方工具,手动的。 有几个平台直接支持markdown导入,只是要调整一下图片上传即可。...
--躺柒
点击右上角即可分享
支持DeepSeek的编程助手
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库