原文地址:http://amattn.com/2011/10/15/the_disposition_of_objective-c.html
筆者經過十年的Objc編程,在此談一些對Objc的評論。
冗長(Verbose)
這是最顯然的Objc特性。Objc編程中總會用到極為冗餘的文法,你只能對此習以為常。有經驗的Objc程式員相當倚賴於IDE等多種工具來輔助編碼。若你要熟練而美觀地書寫Objc代碼,就得動用大量工具來對付該死的文法,如程式碼片段(snippets),鍵盤宏,定製的模板等。這些技巧用將出來,將一發不可收拾。幸好標準的訊息傳遞機制便於閱讀,為Objc挽回不少分數。
醜陋(Ugly)
Objc是一種醜陋的語言。把C語言拿來,又在類結構的裡外充斥著@指令——這就像一個流浪漢穿著一個垃圾袋。再把Smalltalk硬塞進去。然後發明屬性(Property)來善後。最後空降個^ 代碼塊(Block,iOS4之後推出的特性,相當於第一類值的C函數,譯者注)來完成這門語言。
我深愛Objc,但依然認為Objc的文法既不簡潔,亦不美觀。
易讀(Readable)
優秀的Objc代碼尤其易讀。這部分得益於Objc命令式的文法傾向。通常而言,訊息傳遞機制是程式錯誤的溫床。但能夠在訊息的各參數前加入說明,使訊息體能夠自我說明,非常易讀。
訊息傳遞機制是Objc的最大亮點。
編譯型語言(Compiled)
這有兩個顯著的好處:
得益於編譯器和靜態分析器,許多錯誤不必由程式員來捕捉。於是Objc程式員不為那些無聊而機械的錯誤所困。
第二個好處是優異的程式效能。於是時至今日,iPhone 3GS之後的裝置依然效能優異。
生態系統(Ecosystem)
蘋果公司包攬了Objective-C的IDE,語言實現,以及主流的庫。Xcode,LLVM,Cocoa彌補了很多語言上的缺陷。由於對語言結構上的擴充,諸如子類化,類別是在運行時完成的,自己寫Objc的SDK,架構,庫的話,會遇到很多麻煩。
靜態類型,動態類型,基礎類型(Static, Dynamic or Duck Typed)
在實踐中,土鱉的筆者(your ostentatioulay humble author)偏愛靜態類型和原始類型,因為它們很少導致錯誤。當你確實需要支援多種類型,id是一個動態而方便的工具。正式和非形式協議是id的用武之地。
趨勢(Momentum)
好酒曆久彌香,Objc同樣在成長中。我們已經得到了屬性,塊,GCD以及最近的ARC。只有傻瓜才會認為Objc沒有前途。你日常使用的的程式設計語言會越來越易用嗎?
Objc真正缺少什嗎?
我提一句箴言:
Objective-C:易擴充,易讀的符號式(punctuation-based)程式設計語言。