有人能告诉我什么是强打字和弱打字意味着什么更好?
这将是理论上的答案,但实践方面似乎被忽视了......
强类型意味着您不能使用一种类型的变量而另一种变量(或限制这样做).弱键意味着你可以混合使用不同的类型.例如,在PHP中,您可以混合数字和字符串,PHP不会抱怨,因为它是一种弱类型的语言.
$message = "You are visitor number ".$count;
如果它是强类型的,你必须将$ count从一个整数转换为一个字符串,通常使用cast进行转换:
$message = "you are visitor number ".(string)$count;
......或功能:
$message = "you are visitor number ".strval($count);
至于哪个更好,这是主观的.强类型的倡导者会告诉你,它会帮助你避免一些错误和/或错误,并帮助传达变量的目的等.他们还会告诉你,弱类型的拥护者会称强类型" 不必要语言绒毛,由于常识而变得毫无意义,或类似的东西.作为弱打字组的携带卡片的成员,我不得不说他们有我的号码......但我也有他们的号码,我可以把它放在一个字符串:)
"强类型"及其相反的"弱打字"在含义上相当薄弱,部分原因在于被认为是"强"的概念可能因你所求的人而异.例如,C被不同的作者称为"强类型"和"弱类型",它实际上取决于你比较它.
通常,如果类型系统能够表达与另一个类型相同的约束,则应该认为它更强.然而,两种类型的系统通常不具有可比性 - 一种可能具有另一种缺乏的特征,反之亦然.任何关于相对优势的讨论都取决于个人品味.
拥有更强大的类型系统意味着编译器或运行时将报告更多错误,这通常是一件好事,尽管它可能以必须手动提供更多类型信息为代价,这可能被认为是不值得的.我认为"强打字"通常会更好,但你必须考虑成本.
同样重要的是要意识到"强类型"通常被错误地使用而不是"静态类型"或甚至"清单类型"."静态类型"表示在编译时存在类型检查,"清单类型"表示类型是显式声明的.清单输入可能是使类型系统更强大的最着名方法(想想Java),但您可以通过其他方式(如类型推断)来增加强度.
我想重申的是弱类型是不一样的动态类型.
这是一篇关于这个主题的写得很好的文章,如果你不确定强,弱,静态和动态类型系统之间的区别,我肯定会建议给它一个读.它详细说明了这些差异比简短答案中预期的要好得多,并且有一些非常具有启发性的例子.
http://en.wikipedia.org/wiki/Type_system