V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
keakon
V2EX  ›  iDev

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

  •  
  •   keakon ·
    keakon · 2011-03-27 18:03:12 +08:00 · 9227 次点击
    这是一个创建于 4975 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我觉得中括号很讨厌,其他语言用.的话一路往右写过去就行了,现在每次要调用方法都得回头补个[,除非一开始就预先想到要写几层括号

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

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

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

    另外obj-c不去实现调用的语法糖可能是因为会存在编译时就需要去检验方法存在的问题,以免需要检查是否和getter和setter有冲突,特别是链式调用的话,为了避免冲突必须去检查
    Livid
        11
    Livid  
    MOD
       2011-03-30 03:57:33 +08:00
    打 [ ] 的时候不需要按 SHIFT,从这一点来说,比 ( 和 { 都更容易输入。
    xionghengheng
        12
    xionghengheng  
       2016-12-21 15:21:47 +08:00
    like a shit
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:53 · PVG 01:53 · LAX 09:53 · JFK 12:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.