runoob.com,变量类型( 二 )


面向对象 , 利用继承让子类对象复用父类对象的代码块 。在经过 , 泛型 和 OOP 改造后 , 强类型语言在千禧年前后 , 到达了顶峰 , 以至于这时 , 出现的 Java 和 C# 这样的动态编译语言 , 也采用强类型 。但是 , 弱类型语言并非一无是处:没有变量类型是天然的泛型、OOP也可以引入、适用于脚本代码 , 因此 , 才有 JavaScript 和 Python 这样的 弱类型语言 , 随着 计算机性能的飞速发生使得 强类型语言的性能优势慢慢削弱 , 而弱类型语言的简单灵活慢慢凸显 , 这使得 , 如今的它们也正是 如日中天 。
计算机源于数学 , 早在第一台计算机出现之前 , 数学家就对可行性计算问题进行了深入的研究 , 先后出来了:递归函数、λ-演算、图灵机 , 之后 图灵机称为了计算机体系结构的数学原理 , 而 λ-演算正是函数式编程的本质 。因此 , 我们可以从数学角度来稍微看一下变量(常量)类型 。在数学中 , 变量是有类型的 , 常见应用场景有:场景一:对于 任意 x ∈ ? , ...  , 例如:对于任意 a, b, c, d ∈ ? , 都有 (a2b2)(c2 d2) ≥ (ac bc)2;场景式二:令 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#的泛型 , 都是典型代表 。

推荐阅读