动态类型语言和静态类型语言的区别

2023-10-29

一、概念

动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型(变量使用之前不需要类型声明),该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python 和 Ruby 就是一种典型的动态类型语言,其他的各种脚本语言如 JavaScript 、Shell也属于动态类型语言。

静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++ 是静态类型语言的典型代表,其他的静态类型语言还有 C#、JAVA 、golang等。

总结:静态类型和动态类型的本质区别在于:变量的数据类型确定的时机不同,前者在运行时根据变量值确定;后者在编译时根据声明类型确定

二、优点

2.1、动态类型语言的优点

编写的代码数量更少,看起来更加简洁,可以把精力更多地放在业务逻辑上。虽然不区分类型在某些情况下会让程序变得难以理解,但整体而言,代码量越少,越专注于逻辑表达,对阅读程序越有帮助。

2.2、静态类型语言的优点

首先是在编译时就能发现类型不匹配的错误,编译器可以帮助我们提前避免程序在运行期间有可能发生的一些错误。其次,如果在程序中明确规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高程序执行速度

三、缺点

3.1、动态类型语言的缺点

无法保证变量的类型,从而在程序的运行期有可能发生跟类型相关的错误(typeerror)。

3.2、静态类型语言的缺点

首先是迫使程序员依照强契约来编写程序,为每个变量规定数据类型,归根结底只是辅助我们编写可靠性高程序的一种手段,而不是编写程序的目的,毕竟大部分人编写程序的目的是为了完成需求交付生产。其次,类型的声明也会增加更多的代码,在程序编写过程中,这些细节会让程序员的精力从思考业务逻辑上分散开来。

四、强类型语言和弱类型语言的介绍与区别

4.1、强类型定义语言

强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,不同类型的变量是不能相互赋值的。举个例子:如果你定义了一个整型变量 a,那么程序根本不可能将 a 当作字符串类型处理。强类型定义语言是类型安全的语言。强类型语言包括Java、.net 、Python、C++等语言。

4.2、弱类型定义语言

数据类型可以被忽略的语言。某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言。

4.3、强类型语言和弱类型语言区别

无论是强类型语言还是弱类型语言,判别的根本是是否会隐性的进行语言类型转变。强类型语言在速度上略逊于弱类型语言,但是强类型定义语言带来的严谨性又能避免不必要的错误。

五、当前主流语言类型强弱与动静态分布图

在这里插入图片描述

六、参考文档

1、https://www.jianshu.com/p/355494d8bd08

2、https://blog.csdn.net/gao_zhennan/article/details/123014122

3、https://www.php.cn/blog/detail/31381.html

4、https://juejin.cn/post/6844903933463232519

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态类型语言和静态类型语言的区别 的相关文章

随机推荐

  • jest测试ajax,搭建Jest前端测试框架总结

    先说一下我要使用Jest的原因 由于开发提测了一个js的公共组件 需要测试人员对此组件的功能进行测试 因为提测的直接就是js文件 所以我们也就只能对其中的方法进行类白盒测试 知道了为什么测 那接下来就是怎么测 很容易的想到了需要一个测试框架
  • 60-200-040-使用-命令-MySQL查看引擎的命令

    文章目录 1 查看存储引擎 2 MySAM 和 InnoDB对比 1 查看存储引擎 mysql gt show ENGINES Engine Support
  • 调制与解调(1)——初认识

    在深入项目前 还需要对调制解调做深入学习 1 基本概念 调制 调制就是使一个信号 如光 高频电磁振荡等 的某些参数 如振幅 频率等 按照另一个欲传输的信号 如声音 图像等 的特点变化的过程 调制是通过改变高频载波的幅度 相位或者频率 使其随
  • 基于VS2019配置opencv4.0

    文章目录 1 前言 2 不说废话 直接上图干净利落 2 1 创建新空白项目 2 2 添加一个主文件 2 3 配置opencv环境 2 4 链接器配置 2 5 将opencv添加到计算机环境中 2 6 文件复制 3 运行测试环境 1 前言 不
  • 安信可SX1278LORA通讯试验

    LoRa 的名字是远距离无线电 Long Range Radio 作为一种线性调频扩频的调制技术 最早由法 国几位年轻人创立的一家创业公司 Cycleo 推出 2012 年 Semtech 收购了这家公司 并将这一调制技术 封装到芯片中 基
  • 3D游戏第八次作业

    3D游戏第八次作业 一 简单粒子制作 按参考资源要求 制作一个粒子系统 参考资源 使用 3 3 节介绍 用代码控制使之在不同场景下效果不一样 1 模拟烟花发射 效果展示 实现 给空对象挂载一个名为moveup的粒子系统模拟烟花发射 Emis
  • java中对象属性可以是另外一个对象或对象的参考

    7 对象的属性可以是另外一个对象或对象的参考 通过这种方法可以迅速构建一个比较大的系统 class Motor Light lights Handle left right KickStart ks Motor lights new Lig
  • 改变MySQL的默认编码

    etc mysql my cnf mysqld character set server utf8 collation server utf8 unicode ci init connect SET collation connection
  • 论文阅读-Exploring Frequency Adversarial Attacks for Face Forgery Detection(探索用于人脸伪造检测的频率对抗性攻击)

    一 论文信息 论文名称 Exploring Frequency Adversarial Attacks for Face Forgery Detection 会议 CVPR 2022 作者团队 二 动机 虽然现有的人脸伪造分类器在检测伪造图
  • Java实现异步的几种方式

    Java实现异步的几种方式 异步编程在对响应时间近乎严苛的今天 受到了越来越多的关注 尤其是在IO密集型业务中 对比传统的同步模式 异步编程可以提高服务器的响应时间和处理业务的能力 从而达到快速给用户响应的效果 代码前置 方法中会直接使用到
  • spring boot引入logback.xml

    logback xml
  • 使用@Value("${xxxx}")注解从配置文件读取值

    使用 Value xxxx 注解从配置文件读取值 记录一下自己学习配置文件读取的方法 假设配置文件为 config properties 1 从配置文件中读取值的用法 Value user username private String u
  • SpringCloud快速入门

    文章目录 1 初识 SpringCloud 1 1 微服务 1 2 简介 2 Eureka 注册中心 2 1 简易模拟一个微服务 2 1 1 搭建EurekaServer 2 1 2 注册到Eureka 2 1 3 从Eureka获取服务
  • golang 将字符串变量中的单引号、双引号和反单引号进行转义

    package main import strconv fmt func main var a string a qwe wer f lopg uiii 随便写的例子 因为字符串变量中的单双引号是我们不能提前知道的 b strconv Qu
  • 企业如何通过CRM系统做好客户管理?

    每一位客户对于企业都是非常宝贵的资源 也是企业赖以生存和发展的基础 做好客户管理和关系维护是企业必备的一种能力 如今 随着信息化的发展 很多企业为了更好的管理客户引进了CRM系统 CRM系统可以帮助企业建立 以客户为中心 的管理方式 将市场
  • 奥特曼系列赛文飞踢是哪个服务器,盘点奥特兄弟最强飞踢技,第一名实至名归你能猜到吗?...

    奥特曼系列较之拳头威力 飞踢这种技能的对比更为奥迷津津乐道 其中最具代表性的无疑是 雷欧飞踢 毕竟有数次杀敌纪录 而提起飞踢的威力对比 雷欧飞踢则不见得一定能傲视群雄 平成系暂且不论 在奥特兄弟中 也不乏能与雷欧飞踢分庭抗礼的飞踢技 力 解
  • 创建数据库(脚本实现)

    创建历史数据库 if object id dbo spr create his db is not null drop procedure dbo spr create his db go create proc dbo spr creat
  • matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 就是正弦包含频率是20hz 20 5hz 40hz 采样频率fs是100hz 分析栅栏效应 先是128个点fft 补零到512个点进行fft 再512个点fft 程序是这样的 N1 128 N2
  • innoDB数据收集方式—永久性&非永久性(四十三)

    上篇文章说了连接查询的成本 主要由驱动表的扇出值和被驱动表的查询方法决定 而成本这些都是可以在 cost 表查看的 因为分为server和engine表 server不管理数据成本 里面包含连接管理 查询缓存 sql解码 sql优化 eng
  • 动态类型语言和静态类型语言的区别

    一 概念 动态类型语言 动态类型语言是指在运行期间才去做数据类型检查的语言 也就是说 在用动态类型的语言编程时 永远也不用给任何变量指定数据类型 变量使用之前不需要类型声明 该语言会在你第一次赋值给变量时 在内部将数据类型记录下来 Pyth