为什么Objective-C使用方括号作为消息?

时间:2014-05-18 15:49:35

标签: objective-c syntax smalltalk

我正在读一本关于Smalltalk(Charmond Liu's Smalltalk, Objects and Design)的书。他讨论了如何使用HomeBudget对象在Smalltalk中使用消息作为如何使用多个参数发送单个消息的示例:

HomeBudget spend: 229 on: 'VCR'

Objective-C使用了Smalltalk的许多想法,例如消息传递对象和冒号用于参数,但始终用方括号括起消息。同样的电话会是:

[homeBudget spend:229 on:@"VCR"];

为什么Objective-C使用方括号(而不是像Smalltalk那样留下消息)?它是否需要语法,因为它是基于C的?这是一种风格选择吗?它能为您提供更多选择吗?还有其他原因吗?

2 个答案:

答案 0 :(得分:12)

我发现an interview with Brad Cox似乎暗示方括号代表语法:

  

DD:方括号是Objective-C语法的一个独特部分。方括号是怎么产生的,这是你的做法吗?

     

BC:是的,那就是我。从字面上看,这是寻找一些没有采取的东西。采取了大括号。采用普通括号。这只是搜索不会与C使用的东西碰撞的大括号。

汤姆·洛夫(Tom Love)也赞扬了Masterminds of Programming中的方括号,但他似乎在说这是一种风格选择:

  

我常常把自己称为负责Objective-C中方括号的人,因为Brad和我进行了长时间的谈话。我们是否有一个始终为C的C语法,或者我们是否创建了一种混合语言,我将其描述为“方括号是转换到对象域”?我们的观点是,如果你有一个混合语言,你可以构建一组基础类,以便在某些时候,大部分工作实际上是在方括号内完成的。这允许从典型的应用程序员中隐藏许多细节。

     

方括号表示在Objective-C中发送的消息。最初的想法是,一旦你构建了一组类库,那么你将花费大部分时间在方括号内实际操作,所以你真的在使用对象的底层框架进行面向对象的编程它是用混合语言开发的,它是程序语言和面向对象语言的结合。然后,当您开始构建功能库时,对于进入程序世界的要求越来越少,您可以保持在方括号内。设计一种基本上有两个级别的语言是一个刻意的决定 - 一旦你建立了足够的能力,你就可以在更高的层次上运作。我其实认为这是其中一个原因。如果我们选择了类似C语言的语法,我不确定是否有人会知道该语言的名称,并且它不会在任何地方使用。

答案 1 :(得分:7)

Objective-C是" C"的严格超集。因此,所有添加都要求不要改变" C"语言。所有" C"程序也是有效的Objective-C程序。

C ++ OTHO确实改变了" C"语言不是所有有效的" C"程序将使用C ++编译器进行编译,也不是有效的C ++程序。

因此有必要找到未在" C"中使用的符号。或至少不用于冲突的背景。因此大量使用" @"在Objective-C中。在其他情况下,添加符号以消除" C"。

的歧义