目录

  • 概念定义
    • 静态类型语言
      • 优势
      • 劣势
    • 动态类型语言
      • 优势
      • 劣势
    • 强类型语言
    • 弱类型语言
  • 如何选择
  • 语言类型图

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

概念定义

静态类型语言

指在编译变量时变量的数据类型即可确定的语言,比如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。

语言类型图

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

  1. 静态 动态 强类型 弱类型语言的区别

    原文:http://www.zhihu.com/question/19918532 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格&q ...

  2. java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别

    强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...

  3. 计算机语言的分类:编译型/解释型、动态类型/静态类型、强类型/弱类型

    参考: 计算机语言:编译型/解释型.动态语言/静态语言.强类型语言/弱类型语言 编译型语言.解释型语言.静态类型语言.动态类型语言概念与区别 编程语言傻傻分不清:弱类型.强类型.动态类型.静态类型 1 ...

  4. 静态类型/动态类型/强类型/弱类型

    C/C++是弱类型,并且是静态类型,因为可以容忍隐式类型转换,并且可以进行强制类型转换,然后编译的时候就已经直到变量的类型,所以是静态类型(类型错误引发的是语法错误) python是动态类型,强类型, ...

  5. python 强类型 弱类型_Python到底是强类型语言还是弱类型语言

    0.前言 有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Python 到底是不是强类型语言?我认为是,而他认为不是. 他写了一篇很长的文章<谁告 ...

  6. python 强类型 弱类型_强类型、弱类型

    什么是强类型,什么是弱类型? 之前一直写的OC语言,在自己的意识中,所有数据类型是定义好的,如果改变数据的类型必须进行强制类型转换. 但是接触了JavaScript后发现,一个变量,可以是字符串,也可 ...

  7. [C语言] 通讯录|静态 动态 文件 链表 多版本讲解

    学校的期末小作业,相当于对我们本学期所学内容的一个总结.只要对标题所指内容有所了解即可轻松读懂本题解.下面我们按照要求一步步由浅入深地解决这个问题. 目录 ​ 静态版本 定义类型 添加 输出 查找 修 ...

  8. C语言数据结构静态动态查找表实验

    /*算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找 */ #includ ...

  9. 动态语言和静态语言的比较

    一 .静态语言的优势到底在哪? 来自robbin 摘自 http://www.javaeye.com/article/33971?page=7 引用 是像Java或者C#这样强类型的准静态语言在实现复 ...

最新文章

  1. [JavaScript] 好用的 JavaScript Symbol 类型
  2. 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
  3. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile)
  4. python3.6.4安装教程-centos7中安装python3.6.4的教程
  5. 牛客小白月赛37【部分题解】
  6. mssql 获取自增列起始及增量
  7. 系统集成项目管理工程师-历年真题分析与解答 Android版
  8. backupexec Oracle授权,通过BackupExec重定向Oracle 8I数据库
  9. 专属资料包——Ps基础、788款设计师字体、Ps品牌样机、《20款顶级vi品牌手册》、100款以上世界级ui设计、《世界级插画集》
  10. Spring MVC的数据绑定(简单数据绑定+POJO类型绑定)
  11. 禁区——不要走入政府采购的“黑名单”
  12. 利用微信搜索抓取公众号文章
  13. html脚注制作,幸福西饼:静态页面制作项目总结
  14. EDK II Module Writers Guide上
  15. unity 获取本地视频/下载网络视频
  16. 清橙A1206 小Z的袜子(莫队算法)
  17. 如何书写md格式的文档
  18. jquery实现输入框实时统计字数和设置字数限制功能
  19. 人工智能安全标准化白皮书(2019版)笔记
  20. 【报告分享】2022百度职业资格考试培训行业洞察-百度营销研究院(附下载)

热门文章

  1. [转]使你更有思想的20本书
  2. Tensorboard 详解(上篇)
  3. 2022-2-21 Leetcode1217.玩筹码
  4. 如何批量下载阿里巴巴产品及公司相册
  5. Java中的常用类——StringBuffer
  6. android多平台打包,Android美团多渠道打包Walle集成
  7. iis服务器添加ssl证书,Windows 服务器 IIS 7.0和8.0添加SSL证书教程【图解】
  8. 生产制造企业车间生产管理系统分析介绍
  9. sicktim571操作手册_TIM3xx简明操作手册
  10. python两数相加取相同的_python如何实现多个文件相同位置的数值相加