所以,我在 Stack Overflow 上阅读了一堆关于这个问题的类似问题,我想我很好地掌握了两者之间的区别。我的问题是除了某些操作对程序员来说更容易这一事实之外,弱类型是否比强类型有任何优势。虽然我同意强类型语言不必要地复杂类型之间的一些操作,但似乎弱类型语言仍然可以用强类型语言完成所有额外的包袱。
就个人而言,我可能更喜欢强类型的额外安全性并处理某些操作的小麻烦,但除此之外,弱类型还有什么优势吗?有没有一些强类型永远无法做到的事情?
所以,我在 Stack Overflow 上阅读了一堆关于这个问题的类似问题,我想我很好地掌握了两者之间的区别。我的问题是除了某些操作对程序员来说更容易这一事实之外,弱类型是否比强类型有任何优势。虽然我同意强类型语言不必要地复杂类型之间的一些操作,但似乎弱类型语言仍然可以用强类型语言完成所有额外的包袱。
就个人而言,我可能更喜欢强类型的额外安全性并处理某些操作的小麻烦,但除此之外,弱类型还有什么优势吗?有没有一些强类型永远无法做到的事情?
一些语言提供了在运行时改变对象或类的行为的概念:没有实现方法的对象可能决定找到一种方法来响应方法调用。
在 Objective-C 中,委托是让另一个对象响应客户端消息的常用方法。对象可以检测到缺失的实现并将方法调用传递给委托。还可以在调用方法时动态添加方法的实现。
这些概念基于动态方法查找,而不是弱类型与强类型。但是弱类型与动态查找紧密结合,所以我认为这是一个优势。
显然,这条线上没有可计算性......强类型语言可以是图灵等价的,并且假设弱类型语言不是 Church-Turing 论文的反例(人们想象这将被广泛宣传,如果这已知是这种情况)那么它们至少与弱类型语言一样强大(从计算上讲)。
然后我们可以询问是否存在任何时间或空间复杂性。我的直觉是,答案是否定的。在 RAM 计算模型下,强类型和弱类型之间的差异可能并不显着(就计算复杂度而言)。我在这里很容易出错。但是,强类型语言可能会被编译为更紧凑的代码,因此无论如何,真正的性能可能有利于强类型语言。
在我看来,唯一明确的好处是可编程性/可写性/可读性/等。也就是说,它使程序员的生活更轻松,因为它允许他们以更少的努力编写更少的代码,从而获得与使用具有更严格类型规则的语言编写更多代码并付出更多努力相同的效果。再说一次,这也是有争议的,因为强类型可以更容易地提供正确性/稳健性保证。
对我来说,几乎没有优势(只有一堆陷阱)。容易出错,难调试,做单元测试是啊....(不知道说什么了),让编程初学者觉得编程好简单,项目一开始就没有设计.
我需要编译错误,我不喜欢调试动态对象为什么出错,或者........
弱类型非常容易出错,因为您只能在运行时发现错误。
编译错误非常有利,因为它们会立即显示,而要查找所有运行时错误,您需要遍历每个用例的每个场景。除非您正在开发覆盖 100% 的自动化测试(我还没有见过这样的人),否则您将拥有比使用强类型语言更脆弱的软件。
弱类型不那么冗长,这意味着您输入的内容更少,但这也是一个神话,因为使用强类型语言您可以获得代码完成,这意味着比弱类型语言更少的击键。