动态语言,是指在程序运行期间检查数据的类型,在程序编写时无需指定数据类型的编程语言。如,Python和Ruby等都是动态语言,还有脚本语言vbscript,javascript等也是动态语言。
静态语言,是指在程序编写时就已指定了数据的类型,编译时做类型检查。如C、C++、Java等都是静态语言。
可以通过比较语言的语法格式,基本就可以确认是动静态语言了。
动态语言在运行期间可以改变数据类型的结构、对象的函数、变量可以被删除和修改。如下面的javascript的例子:
function Person(name){
this.name=name;
}
Person.prototype.getName=function(){
return this.name;
}
var person=new Person("hello");
alert(person.getName());
person.getName=function(){return "xxx"};
alert(person.getName());
静态语言是不能做到这些的。
优缺点
静态语言的主要优点是类型安全,结构规范,方便调试。缺点是需要写更多的类型相关代码,不便于阅读。
动态语言的主要优点是在于方便阅读,不需要写相关的类型代码。缺点是不便于调试,书写不规范时,会造成读不懂,不利于理解。
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。