弱类型、强类型、动态类型、静态类型语言的区别是什么?

弱类型、强类型、动态类型、静态类型语言的区别是什么?

  • 简而言之:强、弱类型和动态、静态语言是编程语言的不同分类角度。动态类型静态类型简单的区别就是在运行时检查[动态],还是编译期检查[静态];强类型弱类型,就是不同类型就行变量赋值时,是否需要显示地(强制)进行类型转换,强类型语言需要显式类型转换,而弱类型语言不需要显式的类型转换。

  • 常见的编程语言如下:比较熟知的语言中:

    • 无类型: 汇编
    • 弱类型、静态类型 : C/C++
    • 弱类型、动态类型检查: Perl/PHP
    • 强类型、静态类型检查 :Java/C#
    • 强类型、动态类型检查 :Python, Scheme
    • 静态显式类型 :Java/C
    • 静态隐式类型 :Ocaml, Haskell

1.1静态类型的语言

  • 静态语言是在编译时 变量的数据类型即可确定的语言,多数静态语言要求在使用变量之前必须声明数据类型,如Java、C#、C++等。

误区

  • 大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。 Ocaml是静态隐式类型

静态类型可以分为两种

  • 如果类型是语言语法的一部分,在是explicitly typed显式类型;
  • 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haske

对于显式类型的语言来说,这意味着你作为程序员必须指定每个变量的类型(例如:Java,C,C ++)。隐式类型语言提供某种形式的类型推断,类型系统能够推导变量的类型(例如:OCaml,Haskell,Scala,Kotlin)

优点:

  • 这里的主要优点是编译器可以进行各种检查,因此很早就发现了很多微不足道的错误。
  • 由于类型的强制声明,使得IDE有很强的代码感知能力,故,在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障;
  • 由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低;

1.2动态类型语言

  • 动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。
  • 如果类型与运行时间值相关联,则语言是动态类型的,而不是命名变量/字段/等。这意味着你作为一个程序员可以写得更快一点,因为你不必每次指定类型(除非使用静态类型语言和类型推断)。
  • 大多数脚本语言都具有这个特性,因为没有任何编译器可以进行静态类型检查,但是您可能会发现自己正在寻找一个由于解释器错误地解释了变量类型而导致的错误。幸运的是,脚本通常很小,所以错误没有太多地方可以隐藏。

    动态语言的优势

  • 思维不受束缚,可以任意发挥,把更多的精力放在产品本身上;

  • 集中思考业务逻辑实现,思考过程即实现过程;

1.3强类型与弱类型

强类型定义语言

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

弱类型定义语言

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

1.4参考

为什么说 Python 是强类型语言?

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

静态类型语言和动态类型语言有什么区别?

弱类型、强类型、动态类型、静态类型语言的区别是什么?

猜你喜欢

转载自blog.csdn.net/endlessseaofcrow/article/details/80350347