昨天我问了PowerShell是否是强类型语言,但没有人能就“强类型”这个定义达成一致,所以我想要澄清这个定义。
可以自由地链接到维基百科或其他来源,但不要直接剪贴粘贴回答。
昨天我问了PowerShell是否是强类型语言,但没有人能就“强类型”这个定义达成一致,所以我想要澄清这个定义。
可以自由地链接到维基百科或其他来源,但不要直接剪贴粘贴回答。
"强类型"这个术语没有统一的定义。
在争吵中它很受欢迎,因为每当有人被证明是错的时候,他们可以重新定义它来表示任何他们想要的意思。除此之外,这个术语没有实际用途。
最好不要使用这个术语,或者如果你要使用它,先严格定义它。如果你看到别人使用它,请问他们定义这个术语的含义。
每个人都有自己的定义。我见过的一些定义如下:
在类型理论中,存在一个类型系统比另一个类型系统更加"强"的概念。特别地,如果存在表达式e1
被类型系统T1
接受,但被类型系统T2
拒绝,则T2
被称为比T1
更加"强"。这里有两个重要的事情需要注意:
"Hi" + 5
吗?这听起来有问题。此外,这也意味着Scala也不是强类型语言,这很有趣,因为每个人都抱怨它太过严格了。 - Blaisorbladex = "5"
x将始终是一个字符串,永远不会是一个整数。
在某些弱类型语言中,您可以执行以下操作:
x = "5"
y = x + 3
// y is now 8
人们常将静态类型与强类型混淆。静态类型意味着“字符串就是字符串就是字符串”。强类型意味着“一旦你将其定义为字符串,它就会被视为字符串,直到重新分配为其他类型”。
编辑:我看到有人在此之后指出了这一点 :)
“strongly typed”这个词完全毫无意义。它没有实际含义,从来也没有。即使某些所谓的定义是准确的,我也看不出为什么有必要去区分;为什么要知道、讨论或争论一门语言是否是“strongly typed”(不管那是什么意思)呢?
这与“Web 2.0”或“OEM”这些术语非常相似,它们也没有实际意义。
有趣的是考虑这些短语是如何开始并在日常交流中扎根的。
强类型意味着你声明变量时需要指定其类型,如果你试图在没有进行强制转换的情况下将该变量转换为另一种类型,编译器会抛出错误。
例如(以Java为例):
int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
静态类型语言是指变量需要在使用之前进行声明的语言。而动态类型语言是指变量可以随时使用,即使它们没有被声明。唯一的条件是必须在使用之前对它们进行初始化。
现在,让我们来谈谈强类型语言。在这种语言中,变量具有一种类型,它们始终是该类型。不能将其分配给另一种类型的值。而弱类型语言是指变量没有类型。可以将任何类型的值赋给它们。
例子:
Java是一种既是静态类型又是强类型语言。它是静态类型的,因为在使用之前必须声明变量。它是强类型的,因为特定类型int
的变量始终保存整数值。不能将boolean
分配给它们。
Powershell 是一种动态类型和弱类型语言。它是动态类型的,因为变量在使用之前不需要声明。它是弱类型的,因为变量可能在某个时间点保存一个类型的值,而在另一个时间点保存另一种类型的值。