你们怎么看待objective-c的中括号?

2011-03-27 18:03:12 +08:00
 keakon
我觉得中括号很讨厌,其他语言用.的话一路往右写过去就行了,现在每次要调用方法都得回头补个[,除非一开始就预先想到要写几层括号

这人脑又不是堆栈,不知道大家是怎么脑补的
9091 次点击
所在节点    iDev
12 条回复
aligo
2011-03-27 18:08:32 +08:00
很多函数式风格的语言实际上都会这样的,例如lisp
其实而且我最近也在应用这种方式作为IR风格
不过这obj-c部分没有实现那个语法糖实在有点让人难以理解了
keakon
2011-03-27 18:20:48 +08:00
@aligo 感觉和lisp不一样,lisp最多只要预先写一个括号就行了,之后都是往后面加括号
virushuo
2011-03-27 18:40:46 +08:00
习惯了就好,何况xcode可以自动完成。如果要连续调用函数也需要有()存在的。
raptium
2011-03-27 18:56:12 +08:00
好像 xcode 打 ] 的时候会自动补 [ 的吧
aligo
2011-03-27 19:07:37 +08:00
@keakon lisp是基于list(也可以看作对象)的折叠,由内到外调用方法的,调用的方法是写在左括号旁边的
而obj-c正好把这些反过来了,但他们堆积很多括号的思想基础是一样XD
shinyzhu
2011-03-29 08:35:20 +08:00
@raptium 自动补的[经常位置不对。
ssword
2011-03-29 08:58:05 +08:00
继承自smalltalk,方法调用不叫方法调用,而是传递消息。
ssword
2011-03-29 09:23:49 +08:00
@aligo lisp的函数调用方式与List无关,不过函数调用可以表示为List。调用的顺序不一定是“从外到内”,而在于正则序还是应用序。

在函数式语言中,调用也不叫调用,叫Apply,参数是靠空格分隔。括号倒不一定多重要,到haskell里就省略了。

不过这跟OO系的语言没有关系。
lldong
2011-03-29 09:26:08 +08:00
由于objective-c是c的超集,又继承了smalltalk风格的消息机制.smalltalk里本身发消息给对象不需要加方括号,但objective-c的编译器需要对它进行标记并做特殊处理,转译为调用运行时API中的objc_msgSend().
aligo
2011-03-29 19:51:01 +08:00
@ssword obj-c所要实现的是在编译时不去检查是否有方法存在,而改为传递消息,这点和lisp不谋而合,也就是obj-c的消息

另外obj-c不去实现调用的语法糖可能是因为会存在编译时就需要去检验方法存在的问题,以免需要检查是否和getter和setter有冲突,特别是链式调用的话,为了避免冲突必须去检查
Livid
2011-03-30 03:57:33 +08:00
打 [ ] 的时候不需要按 SHIFT,从这一点来说,比 ( 和 { 都更容易输入。
xionghengheng
2016-12-21 15:21:47 +08:00
like a shit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/10527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX