编程语言一般分为动态类型、静态类型和强类型、弱类型,例如Python是动态、强类型编程语言,go语言是静态、强类型,而JavaScript是动态、弱类型编程语言。
动态类型与静态类型
动态类型语言
动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
优点:编写的代码数量更少,看起来更加简洁,可以把精力更多地放在业务逻辑上。
缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。
静态类型语言
是编译期间做检查数据类型的语言,即写程序时要声明所有变量的数据类型,是固定的。使用数据之前,必须先声明数据类型(int ,float,double等)。相当于使用之前,首先要为它们分配好内存空间。C/C++是静态类型语言的典型代表
优点:结构非常规范,便于调试,方便类型安全,提高程序执行速度
缺点:为此需要写更多类型相关代码,相对复杂。
强类型与弱类型
强类型
指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定。对于强类型语言,一个变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。例如:假设定义了一个double类型变量a,不经过强制类型转换那么程序int b = a是无法通过编译。
强类型的优点:
1、编译时刻能检查出错误的类型匹配,以提高程序的安全性;
2、可以根据对象类型优化相应运算,以提高目标代码的质量;
3、减少运行时刻的开销。
弱类型
正好与强类型相反,编译时的检查很弱,它仅能区分指令和数据,弱类型语言允许变量类型的隐式转换,允许强制类型转换等,如字符串和数值可以自动转化。
二者区别:
1、不管是强类型还是弱类型,变量都有两个属性:类型和值
2、强类型的变量类型是不能改变的,弱类型变量是随需改变的,这是强弱的真正含义。 强类型的变量一经声明,就只能存储这种类型的值,其他的值则必须通过转换之后才能赋给该变量,有编译器自动理解的转换,也有由程序员明确指定的强制转换。但是,弱类型的变量类型则是随着需要不断转换。
3、强制转换并没有改变变量类型。强类型语言有个“强制转换”,这改变的是变量的值的类型,以便进行赋值,而没有改变变量的类型。变量的类型是不允许改变的。
总结:
编译时就知道变量类型的是静态类型;运行时才知道一个变量类型的叫做动态类型。
动态类型:python、JavaScript、php等
静态类型:golang、C、C++、Java、C# 等
强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换。
强类型语言:python、golang、Java、C# 等
弱类型语言:JavaScript、php、C、C++等