开发语言的静态/动态,强类型/弱类型之分

之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什么类型,动态还是静态,我总是比较尴尬的不知道怎么去接。在知乎上翻了一遍发现一个特别好的解释,因为是图片,我这里就整理出文字,如果有谁知道原文的出处麻烦留言告知我一下。知乎链接(比较靠后的一个回答,需要耐心翻一下)

概念定义

静态类型语言

指在编译变量时变量的数据类型即可确定的语言,比如C/C++/JAVA/C#,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言则可以不这么做

优势

  1. IDE可以智能提示。因为静态类型语言的类型是确定的,所以编辑器就可以知道当前的变量有哪些属性和方法
  2. 编译的时候能够发现类型不匹配的错误,而动态语言最多只能发现语法的错误

劣势

  1. 因为要定义数据类型,代码量也会随之变大,编程应该更专注于程序的本质,而不是把精力分散到数据类型定义上
  2. 缺乏灵活性,因为一个变量只能赋值某种类型,当程序需要扩展的时候,这就会成为枷锁,当然可以通过继承和接口实现,但这会陷入另一个深渊,需要更多的精力去纠结复杂的继承关系

动态类型语言

指在运行时确定数据类型的语言,变量使用之前不需要类型声明,通常变量的类型就是被赋值那个值的类型,比如VB/Python

优势

  1. 相反于静态类型,编程完全集中于程序的设计本质上,代码的简洁度也会提高,开发效率可能会数倍的提高
  2. 因为程序规模的降低,程序的可理解性也会提高。静态类型的拥护者可能会认为,少了类型信息,程序编的更不可读了。这个就属于仁者见仁了,有人会认为程序更集中于程序的本质上会更可读,也有人认为有了类型的辅助程序会更可读

劣势

  1. 程序执行速度慢,因为动态类型的语言,类型检查是在运行期做的,但随着计算及性能的提高,执行速度不是什么严重的问题
  2. 不执行就检测不出错误,当然要是增加类型检查插件那就另说了。

强类型语言

一旦变量的类型被确定,就不能转化的语言,比如java/Python。

弱类型语言

弱类型语言则反之,一个变量的类型是由其上下文确定的,比如VB/Perl/C

如何选择

套用一句流行的话就是:Static typing when possible, dynamic typing when needed。我的理解如下:

  1. 尽可能使用静态语言。类型判断可能帮助我们更早的发现问题,让代码更加规范化
  2. 在需要的时候使用动态语言。比如写一些脚本,肯定想要高效的实现,懒的去专门定义那些烦人的Interface。

语言类型图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值