动态类型语言、静态类型语言、强类型语言、弱类型语言解释

news2024/11/15 17:36:41

        首先要明确这些名词都是针对数据类型展开的各自定义,同样针对数据类型在编译时和运行时会有一些限定或者规则存在。动态类型语言不能等同于弱类型语言,静态类型语言也不能等同于强类型语言。

        静态类型语言和动态类型语言放到一个维度来进行评价类型系统,而强类型语言和弱类型语言是在另一个维度来评价类型系统。

1、静态类型语言和动态类型语言

        静态类型语言和动态类型语言评价类型系统的维度可以理解为类型的定义。

1.1 静态类型语言

        静态类型语言在创建变量时需要显式的定义当前变量的类型,并且通常该变量一旦定义了类型,则在其整个生存周期内都是不可改变的。所以在编码阶段就需要定义好变量类型,在工程编译阶段会进行变量类型的检验,不定义、不同类型之间进行的组合操作会判定为不合法,工程编译直接报错且停止工程的编译。

例如如下的C++代码:

int a = 1; //显式定义类型合法,可以通过编译器检验

std::string str("demo"); //显式定义类型合法,可以通过编译器检验

c = 0.123; // 定义不合法,没有显式的定义变量类型,不能通过编译器检验

1.2 动态类型语言

        动态类型语言在创建变量时不需要显式的定义当前变量的类型,并且该变量在运行时可能会随着程序逻辑的运行需要改变当前的数据类型。所以动态类型语言在编码阶段能一定程度上减少开发者的开发工作量,不用为类型定义、操作组合中不同类型转换的合法做过多设计。

例如如下的python代码

a = 1 #根据类型推导当前命名为a的变量为整型int,合法可运行

b = “test” #根据类型推导当前命名为a的变量为字符串类型str,合法可运行

又如PHP代码

<?php

$a=1; //定义变量a,赋值为1,类型推导为int

$str='test'; //定义变量str,赋值'test',类型推导为string

// add() 包含两个参数和一个返回值,不校验输入类型的合法性

function add($a, $b) {

return $a + $b;

}

?>

1.3 总结        

        所以需要程序更加健壮,完全严格按照预期要求进行运行,则使用静态类型语言,需要灵活高效的进行编码,则使用动态类型语言,但是要承担程序不按照预期要求的规则运行的后果,且出现问题不易于排查。

2、强类型语言和弱类型语言

        强类型和弱类型是指编程语言在处理运算操作时,对不符合规则的值的处理策略,要么进行类型转换继续进行程序执行,要么判为非法停止运行。

2.1 强类型语言

        对于类型不匹配的操作,编译器检测为不符合规则,则会直接报错。

        例如如下的C++代码(现在也存在部分弱化规则,不做展开在,只讨论当前概念)

int a = 1;

int b =2;

std::string str("demo");

cout << a+b << endl; // 组合操作合法,可以通过编译器检验

cout << a+str << endl; //组合操作非法,不能通过编译器检验

又有如下python代码:

a=1

b="2.3"

c=a+b

运行报错:

{'result__': "[Error] TypeError: unsupported operand type(s) for +: 'int' and 'str'"}

所以python是一种动态类型语言且是一种强类型语言

2.2 弱类型语言

        对于类型不同的操作,不做类型匹配合法性,运行时会进行类型转换,程序继续运行下去。

例如如下的PHP代码

<?php

$a=1;

$str='test';

$a=$str; //将变量str赋值给变量a,运行无误,此时a已经变成string类型变量,且值为test

echo($a); //输出变量a此时为test,运行无误

?>

2.3 总结        

        与静态/动态之间存在一条明确的界限不同,语言的强/弱是一个范围,语言可以表现出不同程序的强/弱。有些文章说 C++ 是强类型,也有文章说 C++ 是弱类型,这就是原因所在。

3、类型象限图

下图使用象限示意图汇总了常用编程语言的不同分类:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ClickHouse物化视图

目录 1 概述1.1 物化视图与普通视图的区别1.2 优缺点1.3 基本语法 2 案例实操2.1 准备测试用表和数据2.2 创建物化视图2.3 导入增量数据2.4 导入历史数据 1 概述 ClickHouse 的物化视图是一种查询结果的持久化&#xff0c;它确实是给我们带来了查询效率的提升。用户查起来跟表没…

MYSQL---主从同步概述与配置

一、MYSQL主从同步概述 1、什么是MySQL主从同步&#xff1f; 实现数据自动同步的服务结构 主服务器(master): 接受客户端访问连接 从服务器(slave)&#xff1a;自动同步主服务器数据 2、主从同步原理 Maste&#xff1a;启用binlog 日志 Slave&#xff1a;Slave_IO: 复制master主…

CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx

目录 一、CPU中的寄存器分类 1.用户可见寄存器 2.控制和状态寄存器 一、CPU中的寄存器分类 大致分为两类: 一类属于用户可见寄存器&#xff0c;对这类寄存器编程&#xff0c;以及通过优化使CPU因使用这类寄存器&#xff0c;而减少对主存的访问次数&#xff0c; 另一类属于控…

MPRC086444-005对其进行维护和管理,以确保系统的稳定性和可靠性。

​ MPRC086444-005对其进行维护和管理&#xff0c;以确保系统的稳定性和可靠性。 变电站自动化系统优缺点 变电站自动化系统结构 变电站自动化系统优缺点 变电站自动化系统是以计算机技术、自动控制技术及通信技术为核心&#xff0c;对变电站及配电系统各个环节进行自动化控制和…

自动化生成持久化游戏管理器

自动化生成持久化游戏管理器 引言游戏管理器持久化自动化生成游戏管理器Addressables 引言 自动化生成的持久化游戏管理器是一个指通过使用自动化工具和技术来生成游戏的持久化管理器的过程。持久化管理器是负责管理游戏状态的组件&#xff0c;包括存储和检索游戏数据的功能&a…

GPT3 和它的 In-Context Learning

作者 | 太子长琴 整理 | NewBeeNLP 大家好&#xff0c;这里是NewBeeNLP。ChatGPT 的爆火让很多 NLPer 大吃一惊&#xff0c;焦虑感爆棚&#xff0c;它的思路和方法都不复杂&#xff0c;但效果却出奇的好。 我想任何研究成果的爆发都不可能是一蹴而就的&#xff0c;期间必然包含…

【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 18 日&#xff0c;在 1955 年的今天&#xff0c;著名物理学家爱因斯坦在美国新泽西州的普林斯顿逝世。爱因斯坦于 1905 年获得物理学博士学位&#xff0c…

vue---双向绑定

目录 1、.sync修饰符-双向绑定 2、v-model修饰符-双向绑定 3、双向绑定原理 vue 中的双向绑定是语法糖。 1、.sync修饰符-双向绑定 . vue是单向数据流的。父组件可以通过prop向子组件传递数据。子组件需要通过自定义事件来将自己的数据变更通知给父组件&#xff0c;我们可以通过…

分布式任务调度系统分析

背景介绍 首先&#xff0c;我们来思考一些几个业务场景&#xff1a; XX 信用卡中心&#xff0c;每月 28 日凌晨 1:00 到 3:00 需要完成全网用户当月的费用清单的生成XX 电商平台&#xff0c;需要每天上午 9:00 开始向会员推送送优惠券使用提醒XX 公司&#xff0c;需要定时执行…

多线程并发编程学习笔记9(小滴课堂)------线程池及Executor框架

它只会使用10个线程。因为我们设置了它的容量。 我们现在把这个队列容量设置为20. 我们可以看到这里它使用了20个线程。但是出了异常&#xff0c;这个后面我们会学习。 我们现在使用一下我们的callable&#xff1a; 一般我们如果是想在线程执行完以后&#xff0c;获得一个返回…

019 - C++ 中的局部静态(local static)

在前几期里&#xff0c;我们了解了static关键字在特定上下文中的含义。 今天我们看一看另一个环境。我们可以在局部作用域中使用 static 来声明一个变量。 这种情况和我们之前看到的两种static有点不同。这次的局部静态 Local static 有更多的含义。 声明一个变量&#xff0…

个人知识库(持续更新中)

打造一个属于自己的知识库 为什么会有这个知识库会记录什么内容基础知识Java核心Java WebMySQL 中间件&工具项目代码资源仿牛客社区Web开发华夏ERP软件 视频资源代码之外持续更新中… 为什么会有这个知识库 作为羊哥的死忠粉&#xff0c;当他谈到个人知识库这个东西的时候…

RS-485 基础知识:何时需要端接,以及如何正确端接

RS-485 网络的许多信号完整性和通信问题都源于端接&#xff0c;这可能是因为缺少端接或端接不正确。在 RS-485 基础知识系列的这一部分&#xff0c;我将讨论何时不需要端接 RS-485 网络&#xff0c;以及在需要端接时如何使用标准&#xff08;并联&#xff09;端接和交流电 (AC)…

【JavaEE】常见的锁策略与CAS的ABA问题

文章目录 1 常见的锁策略1.1 乐观锁与悲观锁1.2 轻量级锁与重量级锁1.3 自旋锁与挂起等待锁1.4 互斥锁与读写锁1.5 可重入锁与不可重入锁1.6 公平锁与非公平锁 2 CAS 操作2.1 CAS 简介2.2 CAS 的应用2.2.1 实现原子类2.2.2 实现自旋锁 3 CAS 的 ABA 问题写在最后 1 常见的锁策略…

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七

Nacos 客户端的服务发现与服务订阅机制的纠缠 - 篇七 历史篇章 &#x1f550;Nacos 客户端服务注册源码分析-篇一 &#x1f551;Nacos 客户端服务注册源码分析-篇二 &#x1f552;Nacos 客户端服务注册源码分析-篇三 &#x1f553;Nacos 服务端服务注册源码分析-篇四 &am…

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及建设项目入河排污口方案报告书

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

STM32(十六)正交编码器

一、简介 增量式编码器 增量式编码器也称为正交编码器&#xff0c;是通过两个信号线的脉冲输出来进行数据处理&#xff0c;一个输出脉冲信号就对应于一个增量位移&#xff0c;编码器每转动固定的位移&#xff0c;就会产生一个脉冲信号 通过读取单位时间脉冲信号的数量&#xff…

自动修改文章的软件-自动修改文案原创软件

有没有自动修改文章的软件 修改文章可能是很多人日常工作中必须完成的任务&#xff0c;但一般情况下&#xff0c;这需要人工完成。幸运的是&#xff0c;现在有很多文章修改软件可以帮助我们节省时间和精力。本文将向您介绍一款优秀的修改文章软件&#xff0c;名为147SEO&#…

SLAM论文速递【SLAM—— TwistSLAM:动态环境下的约束SLAM】—4.17(2)

论文信息 题目&#xff1a; Optimization RGB-D 3-D Reconstruction Algorithm Based on Dynamic SLAM 基于动态SLAM的RGB-D三维重建算法优化论文地址&#xff1a; https://ieeexplore.ieee.org/abstract/document/10050782发表期刊&#xff1a; IEEE Transactions on Instru…