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