32 | 编程范式:类型系统和泛型的本质
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
前面,我们讨论了从 C 到 C++ 的泛型编程方法,并且初探了更为抽象的函数式编程。正如在上一讲中所说的,泛型编程的方式并不只有 C++ 这一种类型,我们只是通过这个过程了解一下,底层静态类型语言的泛型编程原理。这样能够方便我们继续后面的历程。
是的,除了 C++ 那样的泛型,如果你了解其它编程语言一定会发现,在动态类型语言或是某些有语法糖支持的语言中,那个swap() 或 search() 函数的泛型其实可以很简单地就实现了。
比如,你甚至可以把swap()函数简单地写成下面这个样子(包括 Go 语言也有这样的语法):
在上一讲后面的 Reduce 函数中,可以看到,在编程世界中,我们需要处理好两件事:
第一件事是编程语言中的类型问题。
第二件事是对真实世界中业务代码的抽象、重用和拼装。
所以,在这一讲中,我们还是继续深入地讨论上面这两个问题,着重讨论一下编程语言中的类型系统和泛型编程的本质。
类型系统
在计算机科学中,类型系统用于定义如何将编程语言中的数值和表达式归类为许多不同的类型,以及如何操作这些类型,还有这些类型如何互相作用。类型可以确认一个值或者一组值,具有特定的意义和目的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了编程范式中类型系统和泛型的重要性,以及不同编程语言中的实现方式。作者首先介绍了泛型编程的普遍性,不仅限于C++,而是涉及到各种编程语言中的类型问题。通过C++的例子,探讨了底层静态类型语言的泛型编程原理,并指出在动态类型语言或支持语法糖的语言中,泛型函数可以更简单地实现。文章强调了对类型系统和泛型编程的深入理解的重要性,以及编程语言设计中的取舍。通过学习C++,读者可以了解到一个比较完整的泛型编程里所涉及的编程范式,这些编程范式在其他语言中都会或多或少地体现着。总的来说,本文对于想要深入了解编程范式的读者来说,是一篇值得阅读的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(47)
- 最新
- 精选
- 云学意犹未尽啊,比追剧还痛苦
作者回复: 哈哈
2018-01-12342 - lostsquirrelpython 不能这样用吧, x=5,x="hello", python 可以说是强类型吧
作者回复: 当然可以。强类型和动态类型是两码事,前者是判断不同的类型是否可以互转,后者是变量的类型可以动态调整。
2018-03-277 - lostsquirrel谢谢指正,是我记错了,是 x = 5, y = "hello", x + y 会报错,随便吐槽下这app到处坑,留言不能回复,昨天在小程序听音频,不知道在哪停止。。。
作者回复: 我帮你转答池建强
2018-03-271 - shougao“类型是对内存的抽象,不同的类型会有不同的内存分布和内配策略”,见识了,用范型这么多年真是白用了。2018-01-1975
- saiyn“C 语言偏向于让程序员可以控制更多的底层细节,而 Java 和 Python 则让程序员更多地关注业务功能的实现。而 C++ 则是两者都想要,导致语言在设计上非常复杂” —多么简单而又深刻的诠释,大赞2018-05-3124
- W_T类型是对内存的一种抽象。这是我在这篇文章中最大的收获2018-02-0324
- 易轻尘自己的总结:任何编程语言都有类型系统,因为它们都需要在内存中表示数据,不同类型可能具有不同的内存布局和内存分配问题。特别是计算机底层还区分大小端、浮点数、整型等等,再加上用户自定类型,如何处理不同类型间的运算、判断不同类型间的运算是否合法就更为复杂。 有的语言将这个任务放在编译时进行(静态类型系统),有的语言放在运行时进行(动态类型系统)。 而泛型的主要目的就是提高代码的复用性,能够使某个算法能在不同的类型上正确运行,而无需程序员为每个类型都写出相应的算法。怎么做呢,加中间层呗,这个中间层的作用还是自己根据具体不同类型选择内存的操作方式以及进行必要的数据类型转换。2019-08-2715
- OutOfMemory1024本来说就看10分钟,一不小心就从一看到三了,耗哥快更新^_^。 这个系列除了了解不同的编程范式,最关注的是不同的编程范式如何设计,解决了什么问题。这些皓哥都点到了。我个人喜欢Scala这门语言,觉得它的设计非常优美,函数式编程和类型系统都是它的特点,希望皓哥这个系列或者答疑中能写写您的看法。 对于皓哥掌握那么多不同的编程范式,每种起源发展娓娓道来,我也是钦佩不已,不知道皓哥能不能介绍下是怎么学习和了解的,谢谢!2018-01-11110
- Edward Lee有时候,人们就喜欢将动态语言变成静态,将静态语言变成动态。如 JavaScript 中的 TypeScript,Java 中的 Scala Groovy Kotlin2020-04-2727
- edisonhuang所有编程语言都需要解决两个件事情: 第一件事是编程语言中的类型问题。 第二件事是对真实世界中业务代码的抽象、重用和拼装。 使用数据类型,可以帮助程序员忽略掉底层系统对资源的操作,但同时也带来代码和类型的绑定。因此泛型就是采用合适的策略,解决掉对底层系统资源访问,内存的分配和释放问题。解决数据的移位变换问题,解决数据容器的访问问题。 可以看到,由于程序语言是业余系统和计算机底层硬件之间的粘合剂,因此任何程序语言都不可能避免数据类型,区别只在于类型是编译时指定,还是运行时检查。通过泛型可以带来代码的重用,同时保证类型的安全2019-06-196
收起评论