【问题标题】:Why is Objective-C considered a simple language?为什么 Objective-C 被认为是一门简单的语言?
【发布时间】:2010-07-14 10:35:40
【问题描述】:

我听说 Objective-C 是一种“简单”的语言,即就其语言特性而言。它确实是我知道的唯一一种语言,但我之前学过一点 Java,就语言特性而言,它们似乎非常接近。

我从未接触过 C++。与 Objective-C 相比,C++ 是否有更多功能?如果有,使用这些额外功能集是否有优势?

【问题讨论】:

  • 由于我对 C++ 和 Java 等更高级的语言不太了解,因此我真的不想将其作为答案发布,因为我相信有人会有非常详尽的解释,但是如果是在语言特征上它们真的相距甚远的要点。首先想到的是名称空间和运算符重载。几乎所有高级语言都有这些,但没有 Objective-C。尽管如此,它仍然是一门非常棒的语言,尤其要感谢它从 smalltalk 中借鉴的一些约定,比如对象消息传递,而不是常规的旧方法调用。
  • 谢谢。我将阅读的命名空间和重载。 “非常棒的语言”——同意。
  • 单独的 C++ 模板比整个 objc 语言更复杂...如果您正在查看语言复杂性,并从编译器的角度考虑实现/支持。

标签: objective-c language-features


【解决方案1】:

我从未听说过将 Objective-C 描述为“简单语言”;相反,Objective-C 的一些语言特性——例如动态绑定、类别和自省——使它成为一种相当强大的语言。

但是,有几个原因会导致它被视为一种功能不如其他语言丰富的语言,包括:

  • 在 Apple 的 Objective-C 2.0 之前没有垃圾回收(一般来说),在此之前内存主要通过引用计数来管理;这与使用垃圾收集进行所有内存管理的 Java 等语言不同。
  • Objective-C 中没有命名空间;这又不同于其他语言,例如 C++。约定是类和函数应该加上前缀,正如在 Foundation、AppKit 等中可以看到的那样,它们都以NS- 为前缀。这有时可能是一个缺点。
  • 没有真正的抽象类。在 Objective-C 中,抽象类只是设计为抽象的,仍然可以按原样实例化,不会产生编译器警告或错误。
  • 没有运算符重载。这是由于 Objective-C 运行时的性质以及方法分派的工作原理。相反,采用不同参数类型的方法必须以不同的方式命名;这不一定是缺点,因为它通常可以提高代码的清晰度。

尽管如此,Objective-C 还是有一些相当有用的特性,其中一些直接或间接是由于缺少其他语言可能具有的某些特性而导致的,例如:

  • 使用描述性名称(由于没有运算符重载)通常可以澄清代码并使其在许多情况下能够自我记录。
  • 类别对于扩展您无法直接访问的类很有用。
  • 动态分派意味着您可以随意添加、更改或删除方法,并提供强大的类自省功能。

【讨论】:

  • 非常感谢。我将阅读其中的一些观点。我同意长方法名称的约定对于如何自我记录很有用。起初它看起来很尴尬,但后来你进入了“parseNamesInDictionaryAndPutInOtherDictionary”的氛围。
猜你喜欢
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 2020-02-07
相关资源
最近更新 更多