函式介紹

極為常見

什麼是函式

程式中的函式可以簡單用數學的函式來理解,都是經過一段運算後產生一個結果。不用擔心函式會太過複雜,因為在這單元的學習前各位已經寫過函式,就是每支程式都有的 main 函式。

void main() {
    // 程式碼
}

這其實就是一個函式,就像我們呼叫自訂函式一樣, main 函式就是編譯器會呼叫的函式。

為什麼要用函式

既然有 main 函式了,也許你會問為什麼還需要其他函式?不知道在之前的篇章中你有沒有常常覺得程式很長很雜亂?或者是有一段一樣的程式碼需要重複使用時,只能一直複製貼上?自訂函式就是用來解決這個問題的,將一段功能封裝成一個函式,不僅增加可讀性,還有效降低重複的程式碼維護。

使用函式的情況:

  1. 將特定功能程式碼獨立出來,提升可讀性
  2. 把重複執行的程式碼包裝成函式,方便維護
  3. 創建遞迴函式(後面的章節會提到)

宣告一個函式

一個完整的函式包含三個部分:宣告、內容、呼叫。在這部分我會先介紹宣告的部分,其餘的會在後面的章節提到。

首先一個函式的宣告可以包含三種資訊,分別是函式名稱、接收資訊、回傳資訊,會使用以下格式來書寫。

int function(float x) {
    // 內容程式碼
}

首先 int 是宣告函式的回傳值是整數,如果你要換成其他型態都是可以的。比較特別的是如果不回傳的話可以寫上 void ,表示函式的回傳值是「虛無」。不過接下來的範例都會以 void 為主,回傳值的部分會在後面的章節提到。

接著中間的 function 是函式名稱,名稱不能是保留字,且沒有特殊需求情況下建議名稱不要重複,並使用簡短同時好記的名子,這樣可以很大程度上提高程式碼可讀性。

最後在括號中的 float 是函式的接收值,表示你需要在呼叫函式時提供一個 float 數值給函式。一個函式可以有很多個接收值,也可以有不同形態,一切都根據程式的需求自訂義。

宣告位置與函式原型

函式宣告分有兩種不同的寫法,一種先寫函式原型來告知編譯器,在 main 函式後才寫函式的內文;另一種是在宣告的同時一起撰寫內容。這兩種寫法的執行結果都差不多,可根據你的喜好自行決定要使用哪一種。

void apcs(string s) {
    cout << "Hi APCS" + s;
}

int main() {
    apcs("Guide");
}

上面的這種是值在宣告函式的同時寫完函式內容。這種寫法有一種缺點,就是會導致 main 函式被推到下面,每次要變更都很麻煩,因此也有人採用宣告函式原型的寫法。

void apcs(string); //函式原型

int main() {
    apcs("Guide");
}

void apcs(string s) {
    cout << "Hi APCS" + s;
}

宣告函式原型的方法,就是將一個函式刪除內文,並只保留「回傳型態、函式名稱、接收型態」,甚至連接收的區域變數名稱都可以不寫。

在這章節中我們學會了函式的宣告。下一章教你該如何宣告一個好的函式,避免因小疏忽犧牲程式的效能。

小測驗

函式可以自己呼叫自己嗎?