变量类型,编程语言为什么有变量类型这个概念呢

▇ 首先,我们需要搞清楚类型的由来。

编程语言中所谓的类型,具体指的是数据(包括对象)的类型。数据类型的产生有概念和物理两个方面因素:

  • 概念因素:数据因其本身内容在中我们脑子里对应的数学概念不同而进行的分类,常见类型有:数字(正整数、整数、小数、复数)、布尔、字符、符号、空、以及各种数据结构(字符串、数组、向量、列表、字典、集合、函数、… ),这些类型是在我们长期的数学应用中就形成的,是对外部概念的抽象;
  • 物理因素:我们在计算机语言中所定义的数据,最终需要实现在物理机器上,而非仅仅是大脑中的数学概念,这就要求,知道数据的大小、编码格式、等 这样的物理信息,根据这些信息就可以将数据分类,例如:C语言中,同样是整数却因大小不同而分为: char,short, long,long long,这些类型是因为物理实现而产生的;

若,将所有计算机语言,按照接近程度,从机器到数学排成一列,则越靠近机器这边的语言,其数据类型越受物理因素影响,例如:汇编、C/C++,反之,越接近数学的语言的数据类型越会围绕数学概念进行设计,例如:Lisp、R、Javascript。

▇ 接着,我们来看变量与数据类型的关系。

在所有计算机语言中,大体有两种看待变量的方式:

  • 变量是保存数据的容器;
  • 变量是访问数据的入口;

● 采用第一种方式的计算机语言:

因为变量需要保存数据,所以变量受其保存的数据的类型制约。

将数据保存到同类型变量的过程,称为赋值。

在我们声明变量时,计算机要给这个变量分配内存,这时,计算机至少需要知道这个变量将来的赋值数据的物理大小,于是,计算机语言,不得不要求,声明变量时,必须指出其赋值数据的类型(包含物理大小信息)。另一方面,根据数据类型对变量被分配的内存将伴随它的整个生命周期,同时,在访问变量中数据时还会使用数据类型,这就意味着,声明时指定的那个本意是赋值数据的类型变成了该变量的类型,这就是所谓的变量类型。

这种,变量有类型的语言,称为强类型语言。

● 采用第二种方式的计算机语言:

其变量仅仅保存,数据在对象池中的,入口地址,而不保存数据。将数据入口地址保存到变量的过程,称为绑定。我们在声明变量时,计算机只需要分配一个保存绑定地址的内存块就可以了,无需知道将要绑定的什么数据,于是变量也就没有了类型。

这种,变量没有类型的语言,称为弱类型语言。

▇ 最后,我们来比较一下强弱两种类型的语言。

早期,强类型语言,都是编译(静态)语言,例如:C/C++,Fortran,Pascal 等,这类语言,没有强大的运行时来支持对象池,因此只能采用第一种方式。而早期,弱类型语言,都是解释(动态)语言,例如:Lisp,Scheme 等,它们有强大的解释器,其中包括对象池,因此可以采用第二种方式。

强类型语言,有一个非常大的优势,那就是:编译器知道变量的类型,可以提前检查赋值错误,再加上,编译语言的运行性能优势,这使得,强类型语言,在上世纪中叶很快成了主流。但是,强类型的优势也是缺陷,这就是:由于变量带有类型,所以代码和类型强关联,很难写出同时适用于多种类型的代码,为了修补这个缺陷,几乎同时出现了两种解决方案:

  • 从宏(模板)发展出来的泛型;
  • 面向对象(OOP);

泛型使得,类型可以成为某个代码块的参数,在使用该代码块时被具体制定。

面向对象,利用继承让子类对象复用父类对象的代码块。

在经过,泛型 和 OOP 改造后,强类型语言在千禧年前后,到达了顶峰,以至于这时,出现的 Java 和 C# 这样的动态编译语言,也采用强类型。

但是,弱类型语言并非一无是处:没有变量类型是天然的泛型、OOP也可以引入、适用于脚本代码,因此,才有 Javascript 和 Python 这样的 弱类型语言,随着 计算机性能的飞速发生使得 强类型语言的性能优势慢慢削弱,而弱类型语言的简单灵活慢慢凸显,这使得,如今的它们也正是 如日中天。


计算机源于数学,早在第一台计算机出现之前,数学家就对可行性计算问题进行了深入的研究,先后出来了:递归函数、λ-演算、图灵机,之后 图灵机称为了计算机体系结构的数学原理,而 λ-演算正是函数式编程的本质。因此,我们可以从数学角度来稍微看一下变量(常量)类型。

在数学中,变量是有类型的,常见应用场景有:

  • 场景一:对于 任意 x ∈ ℝ,… ,例如:对于任意 a, b, c, d ∈ ℝ,都有 (a² + b²)(c²+d²) ≥ (ac+bc)²;
  • 场景式二:令 x=1,…, 例如:令 K={(1),(1,2)(3,4),(1,3)(2,4),(1,4)(2,3)},则 S₄ 有正规群列 {e}⊲K⊲A₄⊲S₄;

因此,强类型更符合数学,如场景一那样,于是有些的新兴强类型语言,会进一步吸收数学的特点,这些语言允许程序员不指定变量类型,它是通过上下文来推算出变量的类型,如场景二那样。


变量是否有类型,仅仅是计算机语言的类型系统的一部分,即便是同为,强或弱类型语言,其类型系统也差距较大,以下是一些类型系统具有代表性的语言:

  • C语言,代表命令式编程,其类型系统以过程为核心进行设计;
  • C++语言,代表传统多继承面向对象,其类型系统多继承类-对象为核心;
  • Java语言,代表传统单继承面向对象,其类型系统单继承类-对象为核心,以接口弥补单继承的不足;
  • Javascript语言,代表原型链单继承面向对象,其类型系统构造函数-原型链为核心;
  • Scala语言,代表加入特性的面向对象,特性的加入弥补的单继承的不足;
  • Lisp语言,代表传统函数式编程,其类型系统以符号表达式为核心;
  • Haskell语言,代表加入范畴的函数式编程,数学中的类型,就本质而言,就是基于集合(或者比集合更大的类)之上的各种数学系统,目前最大的代数系统是范畴,Haskell采用的就是以范畴为核心的类型系统;

当然,类型系统,还包括宏和泛型,Scheme的卫生宏、C#的泛型,都是典型代表。

另外,除了类型系统外,计算机语言设计的另外一个重点,就是代码流程控制,例如:面向侧面、懒惰模式、后继体、等,按照控制流也可以对计算机语言进行分类。

原创文章,作者:普尔小编,如若转载,请注明出处:/pxwd/5382.html

(0)
上一篇 2022-11-13 下午2:05
下一篇 2022-11-13 下午2:14

相关推荐

  • 最近两年未来教育概念很热,思考未来教育,应该从哪些维度出发

    思考未来教育,应从三个维度去把握 一、从学习环境看,互联网将成为主角。互联网改变了世界,也改变了我们的学习环境,传统的时空观被打破,学习环境被培养互联网思维和国际化复合型人才的目标…

    培训问答 2022-05-11
  • 贵金属交易师,贵金属交易哪个平台可靠

    投资贵金属,我们要先选平台。如何选平台呢?很多投资者会看平台排名。平台排名有用吗?当然有用,投资者可以根据自己的需求,结合排名,选择适合自己的贵金属交易平台。国内贵金属平台排名:选…

    培训问答 2022-05-31
  • 云南公务员资格复审需要什么材料

    资格复审需提供哪些材料? 资格复审时报考人员须提供:本人身份证、笔试准考证(笔试准考证需打印一式二份,审核后一份报考人员持有,一份留存审核单位)及岗位要求的其他证明材料。 资格复审…

    培训问答 2022-06-08
  • 刘剑在瑞幸咖啡到底扮演什么角色

    最近两天时间瑞幸在美国股市的表现可以用惨不忍睹来形容。 1、瑞幸股价暴跌。 4月2日这天,在短短一天时间之内,瑞幸股价盘中一度暴跌80%、8次触发熔断,截止当日收盘瑞幸股价暴跌75…

    培训问答 2023-03-02
  • 艺术生文化课培训,艺术生文化课 辅导班

    谢请! 关于艺术生文化课辅导班的选择,要根据艺术生本人的实际情况,结合所学专业分数要求做不同选择。 根据艺术生报名的原则,提前批A和提前批B均只能报一所学校。经过艺术联考和校考的孩…

    培训问答 2022-05-08
  • 美术画室集训,美术生为什么要去画室集训呢

    美术生在画室集训。我们按点来分析可以很清楚的了解这种教育模式。 1.美术生的目的,美术生集训的目的最重要的就是为了考上一个好大学。然而现在的教育模式下,美术生的出现实际上学生为了考…

    培训问答 2022-05-23
  • 专业的万通汽修学校

    新疆万通汽车学‌‌校,隶属于新华教育集团,是一所专业培养各类汽修人才的职业技能性院校。汽车美容、钣金喷漆、汽车维修等都是它的强项。一、院校占地面积、建筑面积、批牌手续新疆万通汽车学…

    培训问答 2022-08-06
  • bbox一般人怎么学

    学B-box的话,看看你是什么目的咯。 如果是平常自己随便玩玩,和同学朋友秀一下的话完全可以从网上学的。 如果是决定要以后走这条道路,可以参加一些地下活动和那些大佬打好关系。 接下…

    培训问答 2023-04-17
  • 北师大在职教育硕士,教育硕士毕业后可以从事什么工作还没毕业的要如何准备

    。我是专门做职业辅导的,从我辅导的几位北师大教育硕士的同学来看,专业就业的情况还不错,我先和你分享一下她们的情况,希望对你有启发。 第一类, 最对口的,是学校的教务管理人员。 这里…

    培训问答 2022-04-24
  • 如何才能成为圣贤

    一个人如果立志成为圣贤,首先要立志心中一直存在一个善念。善念存于心间,就是天理,做符合天理的事、说符合天理的话你才能服众、才能使人人心悦诚服。这个念头是善,还需要其他的善吗?这个念…

    培训问答 2023-03-20