如何忍受object-c如此啰嗦的語法?

最近對移動開發感興趣,便看了一下object-c,但發現這語言實在是太啰嗦了(準確地說應該是cocoa這個框架太啰嗦了),作為一個「傳統」型的程序員(使用vim,大部分時間都進行linux內核態編程)該如何過度呢?

補充: 其實現在已經很習慣Xcode了,ios開發基本都在Xcode完成了,同時非常希望vim能做到xcode那種級別的自動補全


我想起很多年前在用java寫代碼時候讀到Sun發布一篇關於java的設計原則 「Reading is more important than writing」 Java Programming Language: Design Principles and Proposals

簡單翻譯加上我個人體會就是)寫出容易讀懂的代碼遠比寫出「聰明」的代碼重要多了,代碼寫久了就能體會這真是一條太重要的原則了

舉個簡單例子,在年輕時候,如果我看到有人寫了幾十行的宏會覺得被雷到覺得這個人真是太牛X了。但是如果現在我看到我的組員寫這種代碼,我很有衝動想把他叫過來K一頓(當然,只是衝動)。因為寫這樣代碼讓別人怎麼能看懂,以後怎麼維護,過段時間自己再看都暈。

回到這個話題本身,初一看代碼確實很啰嗦。但是等過段時間再來讀代碼,基本上不用思考太多都能明白(當然,這也有賴於作者當初把「Reading is more important than writing」 這條原則牢記在心)

其次,如果實在覺得代碼啰嗦就寫個category我自己也忍受不了NSString的啰嗦,寫了些category。c/c++(尤其是c++背景) 剛接觸category可能會覺得這是個很有問題語言屬性吧,不過一旦用起來覺得很方便。

再次做apple開打當然使用xcode啦。

cocoa with love 有篇很精闢的文章講 objective c 方法名的命名規則 http://www.cocoawithlove.com/2009/06/method-names-in-objective-c.html 不過要翻牆

更新下,

因為最新在學swift, 我想說蘋果自己肯定也是認識到這個問題. swift 3.0 終於(終於)把它在2.2 提到這個原則改進了 "omit needless words."

比如 let blue = UIColor.blueColor( ) //有時候對蘋果的一些設計確實也很無語

終於改成

let blue = UIColor.blue()

swift 3.0終於不是那麼啰嗦了. 所以直接跳去學 swift 3.0吧 哈哈


放棄ObjC吧,Swift歡迎你!


確實,Objective-C這種方法簽名讓你能夠直觀的理解到這個方法是幹什麼用的。只要你會一點英文,接觸多了,很容易理解。

不過在一些地方是有問題,比如說繁瑣的初始化,還有遍地的@,讓新手容易望而卻步的中綴語法,還有由於沒有類型推斷導致的重複式聲明。

NSDictionary *testDic = [NSDictionary alloc];

var testDic = NSDictionary()

同樣是完成了一個聲明NSDictionary的作用,但是Objective-C的語法就出現了很多無意義的干擾符,而Swift無論誰來看,都是非常清晰明了的。

而且,由於可選的加入,能夠讓你在保證類型安全的情況下,最大可能的避免了由於初始化問題導致的運行時錯誤,比如Swift可以這樣寫

var testArray:NSArray?
if let counter = testArray?.count{
println(counter)
}

換做Objective-C呢?

NSArray *testArray;
if (testArray != nil){
int counter = [testArray count];
NSLog(@"%d",counter);
}

這位客官,你會覺得Objective-C的第一眼看上去清晰明了?Swift中只要testArray為nil,那麼counter下面if語句中的所有代碼不會執行,這個?和對應的!大大減少了啰嗦程度,又不失語義上的清晰。

Objective-C說到底,是C的超集,但是語法上有些地方顯得非常啰嗦,並且明顯感到有時代特色。

如果你是像我一樣的這種能夠接受Java,喜歡簡潔而強大的語言,請選擇Swift吧……Swift有現代語言的語法,計算屬性,元組,閉包等等非常強大的語法可以寫出異常簡單又明晰的代碼,又可以和Objective-C可以無縫合作,並且最新Swift1.2加入了很多非常好的語法(Swift1.2 帶來了哪些新變化?),網上教材和資料隨處都有,任何問題往StackOverflow一搜都有。

當然,如果你一直堅持說C99比C++11和C++14寫得順,那我也無話可說。


ALL YOU NEED IS XCODE WITH THIS FOLLOWING PLUG-IN!!

FuzzyAutocomplete/FuzzyAutocompletePlugin · GitHub

Dont thank me.


優雅不能當飯吃。


Objective-C的中綴表達式看起來長,但是可讀性非常強,項目很大的時候就有優勢了。

p.s. 面向對象的語言都很「啰嗦」


一開始不太適應正常,一定程度後:OC是我目前玩過最優雅的一門語言,和Xcode搭配寫代碼簡直就是爽。


蘋果再用OC。 世界就不會再有蘋果了。。。。。 求各位放棄,隨我一起入C++的坑吧。


OC註定會被swift淘汰。

沒錯,作為一個C++用戶,我是來黑 OC的,如果有一樣想黑的 請贊我,手動滑稽


慢慢來唄,別用vim了,改用Xcode。雖然命名會很長,非常長,特別長,但是Xcode是有自動補全功能的,一般打出兩三個字母就會自動補充出來了,一目了然。我用慣了Xcode以後再回到vim反而覺得不習慣。


代碼是寫給人看的。


好好設計你的類介面,寫大類

封裝好多東西,但對外開放極少介面

然後類內部你大可以用C語言寫私有方法,這樣至少類內部的方法相互調用會讓你看著順眼。例:

static void set(instancetype me,

NSString* key, id value) {

[me-&>list addObject:value

forKey:key];

}

在類內的任何地方你可以

這樣調用:

set(self, @"name", @"Steve");

如果你是喜歡C語言簡潔函數調用的人

相信這樣寫一定會讓你的類內部變的非常簡潔。

對外的介面盡量一個介面干一件複雜大事情,接受很多參數,這樣可以減少類間方法調用,而且每個參數都回車換行,例:

[otherClass refreshName:@"pig"

Age:29

Color:RED

Align:CENTER];

這樣的話相信你會愛上Objc-C的這種啰嗦的。


youcompleteme支持oc


自動補齊


正在學習中,初接觸確實很啰嗦,當熟悉了以後就和正常對話一樣,都不用深思就知道函數變數要表達的意思。


Use Xcode


有個xcode的插件叫xvim


系統編程和桌面應用肯定不一樣


swift 簡潔的不像話,大概合你口味


所以你就把 objective-C 的 ive 省了是嗎?啰嗦也有啰嗦的好處吧…以後都用Swift業務簡單點。


推薦閱讀:

在 iOS 7 中,Touch ID 算是一個非常雞肋的功能?
為何 iOS 不統一日文和中文環境下的漢字字體?
蘋果8什麼時候出來?
如果喬布斯還在世,還會出現凸攝像頭,全面屏這樣的東西存在嗎?
如何看待很多人聽說 iCloud 的信息授權給國內公司後的反應?

TAG:iPhone | 蘋果公司AppleInc | Linux | iOS開發 | ObjectiveC |