静态类型语言和动态类型语言的关于类型的思考

doob_9117 · · 1641 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

类别:符合条件的对象集。

动态语言不关心对象形成的过程,满足条件即认为是同一类别的对象。
静态语言认为同一类别的对象必须是靠继承得到的类创建的。

静态语言可以靠接口来部分实现上述动态语言的特性,但是一个已经被创建了的对象,即便符合接口定义,但是类因为没有显示声明也无法传入一个以该接口为参数的函数中。因此你要在类那里再加一个实现某接口,于是便有了

class A 继承B 实现接口C{
}
这样的类了。(不过golang的接口则不需要这样的显式声明,我想他们可能意识到了这点)

这里有一个很重要的点就是,你是后发现原来这个对象就属于那个类别的。这个对象可能是后面慢慢形成的。但是当你发现这个事实后再去补上这个类实现了某接口。有点违背当初的设计,因为当初是设计有目的的实现接口的,不是后发现原来符合条件了

我理解类型系统有点像一种记录。只能帮助我们审查历史(类型检查),不能预判未来。

传统的静态类型语言要求每一个对象都对应一个类,每一个对象都由这个类创建。对象间的关系完全由他们从属的类确定。这些类要显式地声明与其他类和接口之间的关系。

类型系统需要程序员在描述程序运行时不断地记录两样东西:
1.数据结构
2.类别之间的关系


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:doob_9117

查看原文:静态类型语言和动态类型语言的关于类型的思考

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1641 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传