Tony Bai · Go 语言第一课
Tony Bai
资深架构师,tonybai.com 博主
21492 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
开篇词 (1讲)
结束语 (1讲)
Tony Bai · Go 语言第一课
15
15
1.0x
00:00/00:00
登录|注册

大咖助阵|海纳:聊聊语言中的类型系统与泛型

示例:Python
运行期类型检查
示例:C++
编译期类型检查
示例:JavaScript
宽松类型检查
示例:Go语言
严格类型检查
字节码层面统一类型
类型擦除
实例化生成新类型
模板
动态类型
静态类型
弱类型
强类型
map
list
vector
是否支持泛型?
是否支持字典?
是否支持结构体?
内建类型数量?
是否动态类型?
是否强类型?
Java 泛型
C++ 泛型
提高维护性
减少重复代码
代码复用
类型参数化
静态类型与动态类型
强类型与弱类型
代码可读性提升
内存布局优化
编译期错误检查
类型不一致可能导致错误
变量有类型
动态弱类型适合脚本
静态强类型易于维护
动态类型语言灵活性优势
静态类型语言性能优势
容器类
输出新类型
输入类型或值
字典
列表
结构体
枚举
问题列表
从类型角度分析
泛型实现比较
泛型的必要性
泛型概念
类型系统分类
类型的作用
数据类型
泛型与代码维护
泛型与性能
泛型在编程中的应用
泛型作为类型转换函数
复合类型
学习语言的视角
泛型编程
类型系统
类型系统与泛型

该思维导图由 AI 生成,仅供参考

你好,我是海纳,是极客时间《编程高手必学的内存知识》专栏的作者。
我们知道,编程语言中有非常重要的一个概念,就是数据类型。类型的概念伴随着我们学习一门具体语言的全过程,也深入到了程序员的日常开发之中。所以对于现代程序员而言,了解语言中的类型系统是一项非常重要的技能。
这一节课,我会简单地介绍什么是类型,类型的作用,以及由简单类型推导来的泛型编程的基本概念,接着再比较 C++ 和 Java 两种语言的泛型实现。很多新的编程语言的泛型实现都有它们的影子,所以了解 C++ 和 Java 泛型,会有助于你理解泛型设计的基本概念。
通过这节课的学习,你会得到一种新的学习语言的视角,那就是从类型的角度去进行分析。
比如我们在学习一门新的语言的时候,可以考虑以下几个问题:
这门语言是强类型的吗?
这门语言是动态类型吗?
它支持多少种内建类型呢?
它支持结构体吗?
它支持字典 (Recorder) 吗?
它支持泛型吗?
……
这样,当我们拿到一门新的语言的规范(Specification)文档后,就可以带着这些问题去文档中寻找答案。等你把这些问题搞明白了,语言的很多特性也就掌握了。这是很多优秀程序员可以短时间内掌握一门新语言的秘技之一。
接下来,我们就从类型的基本概念开始讲起。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

编程语言中的类型系统与泛型是程序员需要了解的重要概念。本文首先介绍了不同编程语言对类型的要求和处理方式,比较了Go语言、JavaScript和Python在类型检查和类型转换方面的差异。接着,讨论了静态类型和动态类型的优缺点,以及在不同场景下的应用。复合类型的概念也得到了介绍,包括枚举、结构、列表、字典等。泛型作为类型系统中常见且困难的话题,通过一个栈的例子展示了其在提高编程效率和节省代码量方面的优势。此外,文章还提供了一个新的视角来理解泛型,将泛型类看作是一种函数,其输入参数可以是类型或值,返回值是一种新的类型。最后,对C++和Java中的泛型实现进行了比较,突出了它们的不同之处。文章内容全面涵盖了类型系统和泛型的重要概念,对读者快速了解编程语言中类型概念具有指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Tony Bai · Go 语言第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • _MISSYOURLOVE
    弱类型就没有这种泛型的苦恼,例如世界上最好的语言PHP,一个数组几乎就可以搞定所有事情,但是性能确实比不上这些编译型语言

    作者回复: 👍

    2022-05-19
    1
  • Kepler
    老师,string stack应该是输出world! hello吧

    作者回复: 我用海纳老师的代码分别在MacOS和ubuntu上编译运行了一下,结果很让我吃惊: macos上输出: 3 world!hello 而ubuntu上居然输出: 3 hello world! macos上的g++版本: $g++ -v Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin ubuntu上g++版本: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 按照代码语义,stack的先进后出,理论上:world! hello 应该才是对的。

    2022-05-05
    2
  • typescript 的泛型的实现 应该是借鉴了 C++ 的实现, 都是产生一个新的类型
    2022-02-14
    1
    4
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部