什么使语言强烈输入?我正在寻找强类型语言最重要的方面.
昨天我问PowerShell是否是强类型的,但是没有人能就"强类型"的定义达成一致,所以我想澄清这个定义.
随意链接到维基百科或其他来源,但不要只剪切和粘贴您的答案.
"强类型"一词没有达成一致的定义.
它在火焰战中成为一个"伟大"的论点,因为每当有人被证明是错误的时候,他们就可以重新定义它以表达他们想要的意思.除此之外,该术语没有任何实际意义.
最好不要使用该术语,或者,如果您使用该术语,则首先严格定义它.如果您看到其他人使用它,请让他定义该术语.
每个人都有自己的定义.我见过的一些是:
强类型=静态类型
strong typed =显式键入
强类型=名义上键入
强类型=键入
strong typed =没有隐式类型转换,只有显式
strong typed =根本没有类型转换
强类型=我理解/弱类型=我不明白的东西
strong typed = C++/weakly typed =其他一切
strong typed = Java/weakly typed =其他一切
strong typed = .NET/weakly typed =其他一切
strong typed = 我的编程语言/弱类型= 您的编程语言
在类型理论中,存在一种类型系统比另一种更强的概念.特别是,如果存在一个表达式e1
,使得它是由一种类型的系统接受T1
,而是由一个类型系统拒绝T2
,然后T2
被认为是强比T1
.这里有两件重要的事情需要注意:
这是一种比较,而不是绝对的:没有强者或弱者,只有强者和弱者弱
该术语没有隐含的价值; 更强并不意味着更好
根据BC Pierce的说法,他写了"类型和编程语言以及高级类型和编程语言":
我花了几个星期的时间试图理清"强类型","静态类型","安全"等术语,并发现它非常困难......这些术语的用法是多种多样的无用.
所以难怪为什么你的同事不同意.
我会用最简单的答案:如果你可以连接一个字符串和一个int而不进行强制转换,那么它就不是强类型的.
编辑:正如评论中所述,Java就是这样:-(
关键是要记住静态类型和强类型之间的区别.强类型语言只是意味着一旦被赋值,给定变量将始终表现为某种类型,直到重新分配为止.根据定义,像Java和C#这样的静态类型语言是强类型的,但许多流行的动态语言如Ruby和Python也是如此.
所以用强类型语言
x = "5"
x将始终是一个字符串,永远不会是一个整数.
在某些弱类型语言中,你可以做类似的事情
x = "5" y = x + 3 // y is now 8
人们混淆静态输入强类型.静态类型表示"字符串是字符串是字符串".强类型意味着"一旦你将它作为一个字符串,它将被视为一个字符串,直到它被重新分配为不同的东西."
编辑:我看到其他人确实指出了这一点:)