问题

Objective-C 的一些函数名为什么都这么长?

回答
ObjectiveC 的函数名确实有时候会让人觉得冗长,这并非偶然,而是其设计哲学和历史沿革的必然结果。要想理解这一点,我们得深入了解 ObjectiveC 的一些核心特质。

首先,ObjectiveC 是一门非常强调消息传递(Message Passing)的面向对象语言。与许多其他语言通过方法调用(Method Call)来执行操作不同,ObjectiveC 中,对象之间是发送消息。当你调用一个方法时,实际上是向对象发送了一个消息。这个消息包含了你想要执行的操作的名称(也就是函数名,更准确地说,是选择器 Selector)。

因此,ObjectiveC 的函数名,或者说选择器,其首要任务是清晰地表达意图。它不仅仅是一个命令,更像是一个请求,一个询问。例如,`tableView:cellForRowAtIndexPath:` 这个方法名,它非常具体地告诉我们,这个方法是用来“询问 tableView”在“指定的 indexPath”处,“提供 cell”。每一个部分都承载着重要的上下文信息。

其次,ObjectiveC 的设计目标之一是动态性。这意味着很多操作是在运行时决定的,而不是在编译时就完全固定的。清晰、自描述的函数名有助于在运行时进行消息的查找和匹配。一个简短、含义模糊的函数名,在动态查找过程中会增加出错的可能性,也更难维护。

再者,ObjectiveC 是在 C 语言的基础上发展而来的,它需要与 C 语言的API和 Cocoa/Cocoa Touch 框架无缝集成。这些框架中的许多API,为了保持与 C 语言风格的一致性,以及为了在有限的命名空间中表达更丰富的含义,也倾向于使用更具描述性的名称。ObjectiveC 的函数名继承了这种传统。

我们还可以从信息隐藏的角度来看待这个问题。一个长的、描述性的函数名,就像一个接口,它向外界清晰地展示了对象可以响应哪些“消息”,但却隐藏了内部具体如何实现这些操作的细节。调用者只需要知道如何“发送”一个特定名称的消息,而无需关心对象内部是如何处理的。

另外,ObjectiveC 的命名约定,特别是驼峰式命名法,也促成了长函数名的出现。它鼓励使用多个单词来组成一个标识符,并通过首字母大写来区分单词。当一个操作需要多个参数来明确其上下文时,例如 `animateWithDuration:animations:completion:`,每个参数的名称都被包含在方法名中,以提供更丰富的上下文。这与许多语言中仅使用短的、通用的函数名,然后将参数名放在方法体内部的做法有所不同。

总而言之,ObjectiveC 的函数名之所以长,是因为它承载着明确的意图表达、动态性的支持、与底层C语言及框架的兼容性、信息隐藏的需要,以及其独特的命名约定。这些长名称并非随意为之,而是为了让代码更具可读性、可维护性,并在运行时更加健壮。它们是一种权衡,用一定程度的冗长换取了清晰度和灵活性。

网友意见

user avatar

这事儿真的扯不上啥自动文档,搞得好像创新发明似得。其实原因很简单,因为OC既不支持函数重载,也不支持函数参数默认值。

这是缺点。再加上不支持命名空间,

很多人爱这方式,是情怀,但不能改变这是缺点的本质。还有很多人爱锤子呢

类似的话题

  • 回答
    ObjectiveC 的函数名确实有时候会让人觉得冗长,这并非偶然,而是其设计哲学和历史沿革的必然结果。要想理解这一点,我们得深入了解 ObjectiveC 的一些核心特质。首先,ObjectiveC 是一门非常强调消息传递(Message Passing)的面向对象语言。与许多其他语言通过方法调用.............
  • 回答
    微软在Build 2015上抛出的重磅消息,即Windows 10将提供对ObjectiveC和Java应用程序的官方支持,无疑是一记重拳,不仅让开发者社区为之振奋,更预示着C和Windows生态系统即将迎来一场深刻的变革。这场变革并非朝夕之功,其长远影响如同涟漪般扩散,触及Windows平台的根基.............
  • 回答
    好的,我们来详细地比较一下使用 ObjectiveC 和 C 开发 iOS 程序各自的优缺点。在讨论之前,需要明确一点:C 开发 iOS 程序主要是通过 Xamarin (现在是 .NET MAUI 的一部分) 框架实现的。 所以,当我们在说 C 开发 iOS 时,实际上是在谈论 Xamarin/M.............
  • 回答
    当你刚开始学习 ObjectiveC 时,面对 Swift 的学习可能会感到困惑。但其实两者有紧密的联系,Swift 是苹果官方推出的现代编程语言,逐渐取代 ObjectiveC 成为 iOS/macOS 开发的首选语言。以下是详细的学习路径和关键区别,帮助你从 ObjectiveC 熟悉到 Swi.............
  • 回答
    Swift 取代 ObjectiveC 已经成为一个不可逆转的趋势,只不过这个转变是一个循序渐进的过程,而非一蹴而就的革命。Apple 的开发者生态系统非常庞大且历史悠久,因此任何重大的语言迁移都需要时间和耐心。Swift 取代 ObjectiveC 的必然性:Apple 推出 Swift 的初衷就.............
  • 回答
    这个问题很有意思,它触及到了开发者社区对不同编程语言生态系统的一些微妙看法。确实,当我们谈论 C 时,“与微软绑定过紧”的说法屡见不鲜,但提到 ObjectiveC,类似担忧的声音却似乎少了很多。这其中的原因,我觉得可以从几个层面来剖析。首先,我们得看看 C 的诞生和发展历程。C 是微软为了构建其 .............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有