[Objective-C] 程式設計教學:為什麼要學 Objective-C?

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
【贊助商連結】

    即使 Swift (西元 2014 年) 已經問世五年了,Objective-C 仍在蘋果 (Apple Inc.) 生態系中占有一席之地。本文來談談為什麼 Objective-C 仍然可以學習。

    為了事業 (for profit) 或純興趣 (for fun)

    相較於 C 或 C++ 或 Java 等主流語言,Objective-C 流行度沒那麼高;對於想學 Objective-C 的讀者,要想想自己為什麼要學 Objective-C?如果是為了事業上的需求,不論是要進入科技公司就職就是自行創業,Objective-C 最主要的用途仍是寫 iOS 和 Mac 程式,Mac 主機算是基本的投資。如果是學興趣的,倒不急著買 Mac 主機,因為可以用 GNUstep 這個 Cocoa 框架 (framework) 的再製品來學 Objective-C。雖然 GNUstep 和 Cocoa 不算完全相容,但其實對於學習 Objective-C 本身算是足夠了。此外,GNUstep 可以用來寫 GUI 程式,只是 GNUstep 比較小眾,會以 GNUstep 為主要運行環境做的程式人比較少。

    為什麼要學 Objective-C?

    蘋果 (Apple Inc.) 長期的態勢應該是要用 Swift 完全取代 Objective-C,但是也不會一下子就把 Objective-C 的支援拿掉。Cocoa 本身的 API 就是使用 Objective-C 來撰寫,現在 AppStore (蘋果的軟體市集) 上至少有數以百萬計的應用程式 (apps) 依賴著這些 API,要把這些軟體以 Swift 來移植就不知道要花多少時間;而且,只是為了換個語言就要大費周章移植,其實很不符合經濟效益。蘋果沒事不會毀掉自己和 AppStore 社群的軟體事業,所以 Objective-C 至少還可以再吃好幾年。

    承上,除非我們自己剛好都只寫新專案或是寫興趣的,那當然可以直接用 Swift 來寫。但是,這種機會比較少,對於實際要上線的程式來說,多多少少還是有機會接手先前的專案,這時候就會用到 Objective-C 了。如果要混搭 C 或 C++ 的程式碼,現階段使用 Objective-C 還是會比 Swift 方便一些。另外,在同一個 iOS 或 Mac 專案中,可以混合 Objective-C 和 Swift 的程式碼,Objective-C 的知識不會變成完全無用。

    Swift 還在進化中

    相對於 Objective-C 來說,Swift 仍然是一個年輕的語言。表面上 Swift 的版本號來到 5.x 了,但 Swift 在每個大版本號之間都引入了一些不相容的改變,在換版本時得修改專案程式碼,代表 Swift 的語法特性其實還沒穩定下來。此外,Swift 的 ABI 也沒有穩定下來,故針對不同 Swift 版本所發布的套件無法交互使用。跟著不穩定的語言跑並不是真正的學習,說穿了這些現象只是蘋果公司的技術債;如果沒有迫切需求,等 Swift 真正穩定下來再學習也不遲。Swift 開發團隊承諾在 Swift 5 之後 ABI 會穩定下來,可以持續關心一下。

    Objective-C 相當穩定

    Objective-C 在 2007 年發布 2.0 板後就沒有大的語法變動,代表 Objective-C 的語法相當穩定。對於穩定的技術,相關的知識才能夠累積。Java 已經來到 11 版 (西元 2018 年)了,但是使用 Java SE 6 (西元 2006 年) 的語法寫的程式仍然可以運行,只是少用了一些新的語法特性。Unix 終端機環境的操作邏輯 30 多年來幾乎沒有改變,只是這幾年增加一些新的指令和更動一些參數,同樣的知識可以在 Mac、GNU/Linux、FreeBSD 等類 Unix 平台間通用。同樣的,即使 Objective-C 沒有增加新的特性,仍然足以用來撰寫應用程式。另外,沒有加入新特性不代表棄置專案,只是會以維護 (maintenance) 模式為主。

    Objective-C 的物件系統

    撇除寫 iOS 或 Mac 程式這個實用性質的目的,Objective-C 有一套有趣的物件系統。由於 Objective-C 的目的是將 SmallTalk 的物件系統帶到 C 語言上,所以 Objective-C 延伸出來的新的物件語法其實是從 SmallTalk 的語法搬過來的。相較於 C++、Java、C# 等語言一脈相承的物件體系,Objective-C 的物件系統在一些概念上不太一樣,在學習時不妨相互比較一下。

    由於 Smalltalk 風格的語法相對少見,對於學過 C++、Java、C# 或其他語言的讀者來說,相當不習慣。的確一開始需要花一些時間適應,不過,Objective-C 是 C 語言的嚴格超集,對於物件之間和物件以外的程式碼刻意採用截然不同的語法,對於辨識程式碼反而容易。

    本系列文章方向

    在本系列文章中,我們會以 Objective-C 的語法為主,不會接觸到 iOS 或 Mac 程式設計的部分,日後有機會或許再另開一個系列的文章。除了語法外,我們這系列文章會介紹如何建立 Objective-C 開發環境,分別針對 Cocca 和 GNUstep 兩種開發環境來介紹。

    由於 Objective-C 是 C 語言的嚴格超集,合法的 C 程式碼也是合法的 Objective-C 程式碼。但 Objective-C 引入了一些新的特性,原本在 C 語言中會用到的手法就變得不適用;像是在 C 語言中時常用結構體 (struct) 模擬物件,但 Objective-C 有真正的類別 (class) 語法,就沒必要再用結構去模擬。為了減少讀者翻閱其他資料的時間,有關 C 語言的部分,還是會提及;但在 Objective-C 中有更好的做法時,就不會再鼓勵用純 C 的部分。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【支持站長】
    Buy me a coffeeBuy me a coffee
    【贊助商連結】
    標籤: OBJECTIVE-C
    【分類瀏覽】