python 强类型 弱类型_编程语言的强类型、弱类型

最近更新:27th 3月, 2016大多数情况下,人们用编程语言是否会隐式地转换数据类型来判断一门语言是否为弱类型语言,比如 C。

而实际上,对于除了比较经典的语言外,大部分人对于其他常见语言的强、弱类型是分不清楚的——或者说,是不一致的。因此总会有人来争论它。如果我们以开篇的概念来作为基础,那么矛盾就会显现:

比如 Pascal 曾计划作为强类型语言,但整体上却给类型系统引入了一个漏洞,所以技术上来讲它是弱类型的。

那么到底什么才是强类型,什么才是弱类型呢?我无法回答你,因为业界本身就没有对它进行一个完整的定义。所以如果你用强类型语言还是弱类型语言来区分之,是相当不准确的。——因为你无法解释清楚究竟什么才是强类型什么才是弱类型。

大多数情况下,我们用类型安全、内存安全、动态类型检查和静态类型检查来定义语言——这样就明确多了。

其实大多数情况下,我们对强弱类型的理解是不同的,大部分人会按照开篇的概念来理解,但有时候也会有其他的想法——这是很正常的,因为这个定义本身就不是严格的技术定义。所以由于一开始我并没有深究这个问题,导致我以“弱类型”来描述了 Swift 语言,而实际上按照我们的普遍定义,它应当是强类型语言——因为它并不能隐式转换数据类型。

但是说它是弱类型就一定不对吗?按照我“小众”的定义,弱类型指的是在声明的时候不需要显式地写出值类型,比如大部分情况下,Swift 有类型推断可以依赖。所以以此同理,我会认为 C 语言是强类型语言。

你可能觉得很可笑,但是我仍旧厚着脸皮说我是对的,因为对于弱类型的定义只有普遍的理解而并没有严格的定义。

但同样,我也说明了 Swift 是类型安全的语言,这一点是正确的。

混淆

说起类型安全,你可能就会看到,大部分人用强类型来指代类型安全,他们说 Swift 是强类型语言的时候,其实就是在说:Swift 是一门类型安全的语言。——因为大部分情况下,类型安全的表现和强类型的表现差不多——比如不能隐式地转换值的类型。

但这里我还要讲,当我们讨论一门语言是静态类型语言还是动态类型语言的时候,又会有不少人说静态类型语言是强类型语言,因为它的行为也符合强类型的定义。

你看,如果我们说一个语言是强类型语言,那么它是类型安全的呢?还是说它是静态类型语言呢?或者两者都有?

还是说典型的C、C艹,说它是强类型语言,因为它是静态语言,有些人说不是,因为它不是类型安全的;比如说流行的 Python,它是弱类型语言,因为它不是静态类型语言对吧?可是有人就要反对了:Python 不允许类型隐式转换啊它其实是强类型!

所以我们应当避免用强弱来区分编程语言的行为,你这么做,并不能给听众带来多少益处,恐怕唯一的作用就是让初学者更加糊涂。

延伸阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值