当一种编程语言不需要声明变量类型时(例如PHP和Perl),它的质量是否被称为弱类型或动态类型?我很难理解这两个术语。
我的理解是,动态/静态类型与类型转换有关,而弱/强类型与变量的声明有关。
当一种编程语言不需要声明变量类型时(例如PHP和Perl),它的质量是否被称为弱类型或动态类型?我很难理解这两个术语。
我的理解是,动态/静态类型与类型转换有关,而弱/强类型与变量的声明有关。
1.9.2p290 :001 > 'a'+1
TypeError: can't convert Fixnum into String
当在JavaScript中使用时,您会得到:
> 'a'+1
>> 'a1'
public class Foo
{
public int Bar;
public double Baz;
}
我声明一个类型为foo的变量:
var myFoo = new Foo();
当我像这样引用Foo:
foo.
当我键入 .
时,Visual Studio将显示一个包含 Bar
和 Baz
的列表,因为它已经知道 myFoo
包含这些成员; 它是 Foo
类型。 这是强类型; 这意味着如果我拼错了Bar或Baz,我的程序甚至无法编译。
然而,假设我声明了一个 dynamic
类型的变量,这会导致对象绑定被推迟到程序执行时:
dynamic myFoo = new Foo();
myFoo.Grapes = 6;
这将编译。在运行程序之前不会出现错误;因为 Foo
上不存在 "Grapes",会抛出运行时异常。
这是一个老问题,但对于未来的读者,这篇优秀的文章可能会澄清一些事情:http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html
虽然有点长,但绝对值得一读。
强类型和弱类型:
类型系统最常见的分类方式可能是“强类型”或“弱类型”。这很不幸,因为这些词几乎没有任何意义。在有限的范围内,可以比较两种非常相似的类型系统,并将其中一种指定为具有更强的系统。除此之外,这些词毫无意义。
静态类型和动态类型
这几乎是唯一有实际意义的常见类型系统分类。事实上,它的重要性经常被低估[...] 动态类型系统和静态类型系统是两个完全不同的东西,它们的目标部分重叠。