开发语言的静态/动态,强类型/弱类型之分
目录
- 概念定义
- 静态类型语言
- 优势
- 劣势
- 动态类型语言
- 优势
- 劣势
- 强类型语言
- 弱类型语言
- 如何选择
- 语言类型图
之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什么类型,动态还是静态,我总是比较尴尬的不知道怎么去接。在知乎上翻了一遍发现一个特别好的解释,因为是图片,我这里就整理出文字,如果有谁知道原文的出处麻烦留言告知我一下。知乎链接(比较靠后的一个回答,需要耐心翻一下)
概念定义
静态类型语言
指在编译变量时变量的数据类型即可确定的语言,比如C/C++/JAVA/C#,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言则可以不这么做
优势
- IDE可以智能提示。因为静态类型语言的类型是确定的,所以编辑器就可以知道当前的变量有哪些属性和方法
- 编译的时候能够发现类型不匹配的错误,而动态语言最多只能发现语法的错误
劣势
- 因为要定义数据类型,代码量也会随之变大,编程应该更专注于程序的本质,而不是把精力分散到数据类型定义上
- 缺乏灵活性,因为一个变量只能赋值某种类型,当程序需要扩展的时候,这就会成为枷锁,当然可以通过继承和接口实现,但这会陷入另一个深渊,需要更多的精力去纠结复杂的继承关系
动态类型语言
指在运行时确定数据类型的语言,变量使用之前不需要类型声明,通常变量的类型就是被赋值那个值的类型,比如VB/Python
优势
- 相反于静态类型,编程完全集中于程序的设计本质上,代码的简洁度也会提高,开发效率可能会数倍的提高
- 因为程序规模的降低,程序的可理解性也会提高。静态类型的拥护者可能会认为,少了类型信息,程序编的更不可读了。这个就属于仁者见仁了,有人会认为程序更集中于程序的本质上会更可读,也有人认为有了类型的辅助程序会更可读
劣势
- 程序执行速度慢,因为动态类型的语言,类型检查是在运行期做的,但随着计算及性能的提高,执行速度不是什么严重的问题
- 不执行就检测不出错误,当然要是增加类型检查插件那就另说了。
强类型语言
一旦变量的类型被确定,就不能转化的语言,比如java/Python。
弱类型语言
弱类型语言则反之,一个变量的类型是由其上下文确定的,比如VB/Perl/C
如何选择
套用一句流行的话就是:Static typing when possible, dynamic typing when needed。我的理解如下:
- 尽可能使用静态语言。类型判断可能帮助我们更早的发现问题,让代码更加规范化
- 在需要的时候使用动态语言。比如写一些脚本,肯定想要高效的实现,懒的去专门定义那些烦人的Interface。
语言类型图
开发语言的静态/动态,强类型/弱类型之分相关推荐
- 静态 动态 强类型 弱类型语言的区别
原文:http://www.zhihu.com/question/19918532 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格&q ...
- java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...
- 计算机语言的分类:编译型/解释型、动态类型/静态类型、强类型/弱类型
参考: 计算机语言:编译型/解释型.动态语言/静态语言.强类型语言/弱类型语言 编译型语言.解释型语言.静态类型语言.动态类型语言概念与区别 编程语言傻傻分不清:弱类型.强类型.动态类型.静态类型 1 ...
- 静态类型/动态类型/强类型/弱类型
C/C++是弱类型,并且是静态类型,因为可以容忍隐式类型转换,并且可以进行强制类型转换,然后编译的时候就已经直到变量的类型,所以是静态类型(类型错误引发的是语法错误) python是动态类型,强类型, ...
- python 强类型 弱类型_Python到底是强类型语言还是弱类型语言
0.前言 有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Python 到底是不是强类型语言?我认为是,而他认为不是. 他写了一篇很长的文章<谁告 ...
- python 强类型 弱类型_强类型、弱类型
什么是强类型,什么是弱类型? 之前一直写的OC语言,在自己的意识中,所有数据类型是定义好的,如果改变数据的类型必须进行强制类型转换. 但是接触了JavaScript后发现,一个变量,可以是字符串,也可 ...
- [C语言] 通讯录|静态 动态 文件 链表 多版本讲解
学校的期末小作业,相当于对我们本学期所学内容的一个总结.只要对标题所指内容有所了解即可轻松读懂本题解.下面我们按照要求一步步由浅入深地解决这个问题. 目录 静态版本 定义类型 添加 输出 查找 修 ...
- C语言数据结构静态动态查找表实验
/*算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找 */ #includ ...
- 动态语言和静态语言的比较
一 .静态语言的优势到底在哪? 来自robbin 摘自 http://www.javaeye.com/article/33971?page=7 引用 是像Java或者C#这样强类型的准静态语言在实现复 ...
最新文章
- [JavaScript] 好用的 JavaScript Symbol 类型
- 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile)
- python3.6.4安装教程-centos7中安装python3.6.4的教程
- 牛客小白月赛37【部分题解】
- mssql 获取自增列起始及增量
- 系统集成项目管理工程师-历年真题分析与解答 Android版
- backupexec Oracle授权,通过BackupExec重定向Oracle 8I数据库
- 专属资料包——Ps基础、788款设计师字体、Ps品牌样机、《20款顶级vi品牌手册》、100款以上世界级ui设计、《世界级插画集》
- Spring MVC的数据绑定(简单数据绑定+POJO类型绑定)
- 禁区——不要走入政府采购的“黑名单”
- 利用微信搜索抓取公众号文章
- html脚注制作,幸福西饼:静态页面制作项目总结
- EDK II Module Writers Guide上
- unity 获取本地视频/下载网络视频
- 清橙A1206 小Z的袜子(莫队算法)
- 如何书写md格式的文档
- jquery实现输入框实时统计字数和设置字数限制功能
- 人工智能安全标准化白皮书(2019版)笔记
- 【报告分享】2022百度职业资格考试培训行业洞察-百度营销研究院(附下载)
热门文章
- [转]使你更有思想的20本书
- Tensorboard 详解(上篇)
- 2022-2-21 Leetcode1217.玩筹码
- 如何批量下载阿里巴巴产品及公司相册
- Java中的常用类——StringBuffer
- android多平台打包,Android美团多渠道打包Walle集成
- iis服务器添加ssl证书,Windows 服务器 IIS 7.0和8.0添加SSL证书教程【图解】
- 生产制造企业车间生产管理系统分析介绍
- sicktim571操作手册_TIM3xx简明操作手册
- python两数相加取相同的_python如何实现多个文件相同位置的数值相加