【问题标题】:Advantages of Weak Typing over Strong Typing弱类型相对于强类型的优势
【发布时间】:2011-10-20 03:31:10
【问题描述】:

所以,我在 Stack Overflow 上阅读了一堆关于这个问题的类似问题,我想我很好地掌握了两者之间的区别。我的问题是除了某些操作对程序员来说更容易这一事实之外,弱类型是否比强类型有任何优势。虽然我同意强类型语言不必要地复杂类型之间的一些操作,但似乎弱类型语言仍然可以在强类型语言中完成所有额外的包袱。

就个人而言,我可能更喜欢强类型的额外安全性并处理某些操作的小麻烦,但除此之外,弱类型还有什么优势吗?有没有强类型无法做到的事情?

【问题讨论】:

  • 弱类型和强类型没有铁的定义。这些是政治术语。以这种方式来说,“弱类型”是指“某些类型系统不能诊断出我不同意的某些类型的程序,到我认为应该诊断此类程序的最晚可能的时间”,而“强类型”意味着“类型系统中的束缚和纪律阻碍了表达直接解决方案和日常生产力”。

标签: language-agnostic types strong-typing dynamic-typing weakly-typed


【解决方案1】:

一些语言提供了在运行时改变对象或类的行为的概念:没有实现方法的对象可能决定找到一种方法来响应方法调用。

在 Objective-C 中,委托是让另一个对象响应客户端消息的常用方法。对象可以检测到缺失的实现并将方法调用传递给委托。也可以在调用时动态添加方法的实现。

这些概念基于动态方法查找,而不是弱类型与强类型。但是弱类型与动态查找紧密结合,所以我认为这是一个优势。

【讨论】:

    【解决方案2】:

    显然没有可计算性...强类型语言可以是图灵等价的,并且假设弱类型语言不是 Church-Turing 论文的反例(人们想象这将被广泛宣传,如果这众所周知),那么它们至少与弱类型语言一样强大(从计算上讲)。

    然后我们可以询问是否存在任何时间或空间复杂度。我的直觉是,答案是否定的。在 RAM 计算模型下,强类型和弱类型之间的差异可能并不显着(就计算复杂性而言)。我在这里很容易出错。但是,强类型语言可能会被编译为更紧凑的代码,因此无论如何,真正的性能可能有利于强类型语言。

    在我看来,唯一明确的好处是可编程性/可写性/可读性/等。也就是说,它使程序员的生活更轻松,因为它允许他们以更少的努力编写更少的代码,从而获得与使用具有更严格类型规则的语言编写更多代码并付出更多努力相同的效果。再说一次,这也是有争议的,因为强类型可以更容易地提供正确性/稳健性保证。

    【讨论】:

      【解决方案3】:

      对我来说,几乎没有优势(只有一堆陷阱)。容易出错,难调试,做单元测试是啊....(不知道说什么了),让编程初学者觉得编程好简单,项目一开始就没有设计.

      我需要编译错误,我不喜欢调试动态对象为什么它是错误的,或者........

      【讨论】:

      • “……让编程初学者觉得编程如此简单”——这有什么害处?
      【解决方案4】:

      弱类型很容易出错,因为您只能在运行时发现错误。

      编译错误非常有利,因为它们会立即显示,而要查找所有运行时错误,您需要遍历每个用例的每个场景。除非您正在开发覆盖 100% 的自动化测试(我还没有见过这样的人),否则您将拥有比使用强类型语言更脆弱的软件。

      弱类型不那么冗长,这意味着你输入的内容更少,但这也是一个神话,因为使用强类型语言你可以获得代码完成,这意味着比弱类型语言更少的击键。

      【讨论】:

        猜你喜欢
        • 2011-08-02
        • 2021-12-29
        • 2020-02-19
        • 1970-01-01
        • 2020-05-05
        • 2010-10-05
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        相关资源
        最近更新 更多