---
# System prepended metadata

title: 大力出奇蹟-玩轉程式語言Swift-01-Hello World
tags: [installation, 玩轉程式語言, hello_world, '#大力出奇蹟', '#swift']

---

# 歷史
相傳貝爾實驗室的布萊恩(Brian Kernighan)於1972年撰寫的內部技術文件"A Tutorial Introduction to the Language B"中首次使用B語言展示一字串"hello, world"顯示於螢幕。於1974年在內部技術文件"Programming in C: A Tutorial"再次使用C語言展示字串"hello, world"。

這件事情就這樣流行了起來，現在幾乎各大程式語言或是框架的第一個程式都會命名為hello world，其功能就是展示字串"hello, world"於螢幕上。其代表的意義則是將輸入(字串hello, world)經過系統(撰寫的程式)輸出(展示於螢幕上)。當有人問你某程式語言的掌握程度如何時，你可以回答:差不多hello world！這樣大家都會懂的:joy:

:::info
有一說BCPL更早就使用過"hello, world"來當展示範例，但目前一是沒有明確的資料來源，二是資料顯示是布萊恩讓這件事情流行起來，所以保持與Wiki相同的說法，僅為博君一笑，若有明確的資料來源也歡迎聯繫我指教討論。
:::

---

# 安裝Swift
學習程式語言的第一步永遠是建置相對應的編輯執行環境，實際將程式碼執行起來，藉由不斷地修改、增減慢慢地掌握度也會越來越高。程式語言也是一種語言，不要害怕犯錯，勇敢地使用下去吧！

Swift支援macOS、Linux以及Windows的作業系統，您可參照[安裝網址](https://www.swift.org/install/)自行進行安裝。

也有線上版本(https://swiftfiddle.com/)，可以在瀏覽器上直接執行您的程式碼。
:::info
較不建議使用，因為實際測試後延遲時間有點大，條件許可的狀況下建議安裝於本地端電腦上。
:::

Swift是由蘋果公司開發並用來取代Objective-C的現代程式語言，它借鑒了許多程式語言的思想(Objective-C、Rust、Haskell、Ruby、Python、C#...等)，因此在性能上有優異的表現，可作為一通用的程式語言。然而更多時候，Swift被用來打造iOS、Mac、Apple TV與Apple Watch的App，因此未來的演示將會基於macOS，不同作業系統也會有相同的結果。
:::danger 
雖然Swift也可以開發Web Service，但大多數的狀況Swift會搭配SwiftUI框架開發App，沒有macOS電腦的朋友請自行思考是否需要投入時間學習。
:::

安裝完畢後開啟終端機，輸入
`$ swift --version`

看到swift版本的資訊就代表安裝成功了

:::success
類似以下資訊但並不會完全相同:
swift-driver version: 1.87.3 Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5)
Target: x86_64-apple-macosx14.0
:::

---

# 第一支程式
開啟終端機，進入工作目錄後，輸入
`$ mkdir first_program`
`$ cd first_program`
`$ swift package init --name hello_world --type executable`
`$ swift run hello_world`

會得到以下結果

:::success
Building for debugging...
[3/3] Linking hello_world
Build complete! (1.20s)
Hello, world!
:::

其中
`$ mkdir first_program`
代表建立一個名為first_program的資料夾

`$ cd first_program`
代表進入first_program這個資料夾

`$ swift package init --name hello_world --type executable`
代表建立一個名為hello_world的package，而這個package的型態為executable(可執行的)

`$ swift run hello_world`
代表執行hello_world這個package

---

可以看到first_program資料夾的階層關係如下
```mermaid
graph LR;
first_program-->id1[[Package.swift]]
first_program-->Sources
Sources-->id2[[main.swift]]
```
其中Package.swift紀錄著著個package的資訊(亦即name為hello_world和type為executable)，main.swift則是程式碼所在。

更改main.swift的內容
```
//print("Hello, world!")
print("Sup, man!")
```
在first_program的目錄下，再次執行
`$ swift run hello_world`

會得到以下結果，其中最後一行從"Hello, world!"被更改為"Sup, man!"

---

# Yes, you did it!
抓緊了，要正式啟航了！

---

# 參考資料來源
[1] https://en.wikipedia.org/wiki/%22Hello,_World!%22_program

[2] https://www.swift.org/getting-started/cli-swiftpm/