iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
1
Mobile Development

30 天從 Swift 學會 Objective-C系列 第 1

[01] 30 天從 Swift 學會 Objective-C: 關於這個系列與介紹

這是這個系列的第一篇文章,將簡短介紹系列文,與 Objective-C 的簡介。


Photo by @dtopkin1 on Unsplash

系列開始之前

你好,謝謝你想閱讀這個系列文章,這個系列文章我個人認定是中等難度的,建議是具有基本的物件導向程式設計能力或是具有 Swift 語言基礎的人閱讀。文末有相關的簡單測試,可以快速了解目前的自己適不適合了解這個主題,如果你回答不出來,別擔心,可以留言試著解答,說不定你其實已經知道了。

為什麼要選這個主題

2019 年以前,由於 Swift 尚未達成 ABI 穩定,所以有許多公司在專案上的語言選擇上,會因為 Swift System 的 API 不穩定,為了避免產品在不同 iOS 版本之間有巨大的適應落差,因此會相對選擇歷史相對悠久的 Objective-C。今年( 2020 年) 是 Swift 迎來 ABI 穩定的第二年,市場上漸漸認同了 Swift 語言的價值,願意開始以 Swift 作為主要開發語言。根據 Stack Overflow 在 2020 年的 [ Developer Survey ] 中: Swift / Objective-C 的喜愛比率分別有 59.5 / 23.4%,恐懼比率則分別是40.5 / 76.6% 真實反應了全世界的開發者對於 這兩個語言的偏好。但是由於 Objective-C 學習資源的日漸短少,相關人才也越來越稀缺,Objective-C 的平均薪水足足高於 Swift 10 個百分點(世界範圍)。目前有不少資深的開發者強調想把 Objective-C 的舊有程式改寫成 Swift,這樣的想法成為了這次的鐵人賽選擇這個主題的原因:

透過在 Swift 開發經驗,了解 Objective-C 的語言文法、中心思想及適應 Swift 的方法。

我希望能在 30 天內使讀者了解 Objective-C 的閱讀、理解、改寫,並能夠進一步的具備能為現有 Objective-C 程式碼提供 Swift friendly 的能力。

最小開發環境

  • Objective-C 2.0
  • OS
  • 編輯器沒有限制,推薦 Vim、Xcode

關於我,我是游諭

我是游諭,一位 iOS 的開發者,具備 C 語言、Swift 語言、bash 語言、 Makefile 語言能力,2018 年完成 School 42 Fremont Piscine C,獨立 app 開發經驗,對於物件導向程式設計與設計模式略有涉略,喜歡 Functional 程式設計。

系列文章大綱

文章共區分 3 個大章節:

  1. 介紹 Objective-C 與 C 的關係,說明為什麼學 Objective-C 要一點簡單的 C。
  2. 說明 Objective-C 的物件導向部分,並帶入從Swift來的觀念。
  3. 運用 Apple 提供的 Objective-C syntax,將Objective-C 提供給 Swift 使用。

學習資源

以下是我目前找到不錯的學習資源

Objective-C 介紹

Objective-C 的名字中 Objective 很直接的告訴我們,她的本質還是 C 語言,也因此我們可以理解以下 Objective-C 的開發背景。

C 語言在 1970 年代初期,由 Dennis Ritchie 與 Ken Thompson 在美國 Nokia Bell Labs 開發出來。當初 C 語言面世之前,程式主要以組合語言作為編寫的方式,需要針對執行機器編寫,造成程式必須在指定的電腦上執行的問題。而 C 語言透過定義型別、可移植編譯器,大大的解除了指定電腦的限制,也因此有了高階語言的區分。隨著 C 語言的便利,越來越多公司開始使用 C 語言作為開發主力,而在 1989 年美國國家標準協會將 C 語言標準化,奠定了 C 語言在 20 世紀的樣貌。

而物件導向是沒有在 C 語言出現的。物件導向程式設計早在 1960 年代出現,當時的程式設計面臨軟體維護的危機,為了解決這個在軟硬體逐漸複雜的環境變化,1970 年代便出現了 Smalltalk 語言,奠定了物件導向語言的基礎。

當我們提到物件導向的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。 wiki - 物件導向程式設計

Objective-C 是由 Tom Love 與 Brad Cox 與 1980 年代發表,當時 並不屬於 Apple 公司而是 Productivity Products International。關於當初 Love 與 Cox 設計 Objective-C 的理念,建議可以閱讀由 brad Cox 的書籍 《Object-Oriented Programming, An Evolutionary Approach 》


Object-Oriented Programming, An Evolutionary Approach 封面

1988 年 Steve Jobs 成立 NeXT 公司並買下 Objective-C 的授權,並研發 NeXTSTEP 作業系統作為產品,後續 Apple 收購 NeXT 並使 NeXTSTEP 成為 OS X 的基礎,後來成為 現在所知道的 Cocoa。

下一篇文章介紹 Objective-C 與 C 語言的關係,說明 C 語言在 Objective-C 的地位。

簡單測驗

  1. 請問程式設計中,"宣告" 與 “定義” 有什麼不同?
  2. 請問 heap 與 stack 之外,還有什麼?它們是什麼?
  3. 物件導向程式設計是什麼?為什麼要用物件導向程式設計?
  4. 請問物件導向設計中,每個物件中的函式是不是獨一無二的?

歡迎留言你的答案,或是與已經有留言的網友互動 ?。

references:


下一篇
[02] 30 天從 Swift 學會 Objective-C:Objective-C 的編譯與 Hello world
系列文
30 天從 Swift 學會 Objective-C6

尚未有邦友留言

立即登入留言