什么使语言强类型化?我正在寻找强类型语言最重要的方面。
昨天我问PowerShell是否是强类型的,但是没有人能就“强类型”的定义达成一致,所以我想澄清这个定义。
随时链接到维基百科或其他来源,但不要只剪切和粘贴您的答案。
答案 0 :(得分:26)
“强类型”一词没有达成一致的定义。
它在火焰战中成为一个“伟大的”论据,因为每当有人被证明是错误的,他们就可以重新定义它,以表达他们想要的意思。除此之外,该术语没有任何实际意义。
最好不要使用该术语,或者,如果您使用该术语,请先严格定义。如果您看到其他人使用它,请让他定义术语。
每个人都有自己的定义。我见过的一些是:
在类型理论中,存在一种类型系统更强的概念。特别是,如果存在表达式e1
,使其被类型系统T1
接受,但被类型系统T2
拒绝,则T2
被称为比T1
更强大。这里有两件重要的事情需要注意:
答案 1 :(得分:11)
据B.C.皮尔斯,编写“类型和编程语言以及高级类型和编程语言”的人:
我花了几周时间试图理清 “强类型”的术语 “静态打字”,“安全”等等 发现它非常困难...... 这些术语的用法如此多样 使它们几乎无用。
所以难怪为什么你的同事不同意。
我会选择最简单的答案:如果你可以连接一个字符串和一个int而不进行强制转换,那么它就不是强类型的。
编辑:正如评论中所述,Java就是这样做的: - (
答案 2 :(得分:7)
关键是要记住静态类型和强类型之间存在区别。强类型语言只是意味着一旦被赋值,给定变量将始终表现为某种类型,直到重新分配为止。根据定义,像Java和C#这样的静态类型语言是强类型的,但许多流行的动态语言如Ruby和Python也是如此。
所以用强类型语言
x = "5"
x将始终是一个字符串,永远不会是整数。
在某些弱类型语言中,您可以执行类似
的操作x = "5"
y = x + 3
// y is now 8
答案 3 :(得分:6)
人们使用强类型进行静态输入。静态类型表示“字符串是字符串是字符串”。强类型意味着“一旦你将它作为一个字符串,它将被视为一个字符串,直到它被重新分配为不同的东西。”
编辑:我看到其他人确实指出了这一点:)
答案 4 :(得分:4)
我听到有人在接受采访时说(我认为这是C#的Anders Hejlsberg和turbo pascal成名)强打字不是开关的,有些语言的类型系统比其他语言强。
强,弱,静态和动态类型之间也存在很多混淆,其中静态类型语言为变量分配类型,动态语言为存储在变量中的对象赋予类型。
尝试使用维基百科获取更多信息,但不要指望得出确凿的答案: http://en.wikipedia.org/wiki/Strongly_typed_language
答案 5 :(得分:1)
强类型意味着您声明某个类型的变量,如果您尝试将该变量转换为另一种类型而不强制转换,则编译器会抛出一个异形。
示例(在java中介意你):
int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
答案 6 :(得分:1)
“强类型”一词完全是荒谬的。它没有任何意义,也从来没有。即使一些声称的定义是准确的,我也没有看到区分原因的目的;为什么知道,讨论或辩论一种语言是否是强类型(无论可能意味着什么)是否重要?
这与术语“Web 2.0”或“OEM”非常相似,它们也没有实际意义。
有趣的是,这些短语是如何开始的,并在日常交流中扎根。
答案 7 :(得分:1)
静态类型语言是在使用变量之前需要声明变量的语言。虽然动态类型语言是可以随时使用变量的语言,即使它们未被声明也是如此。唯一的条件是必须先将它们初始化才能使用它们。
现在,让我们来看看强类型语言。在这种语言中,变量具有类型,并且它们将始终是该类型。它们不能分配给另一种类型的值。虽然弱类型语言是变量不具备类型的语言。可以为它们分配任何类型的值。
示例:强>
Java 是静态类型以及强类型语言。它是静态类型的,因为必须先声明变量才能使用它们。它是强类型的,因为特定类型int
的变量将始终保存整数值。您无法为其分配boolean
。
Powershell 是动态类型以及弱类型语言。它是动态类型的,因为在使用它们之前不需要声明变量。它是弱类型的,因为变量可以在某个点保持一种类型的值,而在另一个时间点保持另一种类型的值。