開啟章節選單
函式介紹
極為常見什麼是函式
程式中的函式可以簡單用數學的函式來理解,都是經過一段運算後產生一個結果。不用擔心函式會太過複雜,因為在這單元的學習前各位已經寫過函式,就是每支程式都有的 main
函式。
void main() { // 程式碼 }
這其實就是一個函式,就像我們呼叫自訂函式一樣, main
函式就是編譯器會呼叫的函式。
為什麼要用函式
既然有 main
函式了,也許你會問為什麼還需要其他函式?不知道在之前的篇章中你有沒有常常覺得程式很長很雜亂?或者是有一段一樣的程式碼需要重複使用時,只能一直複製貼上?自訂函式就是用來解決這個問題的,將一段功能封裝成一個函式,不僅增加可讀性,還有效降低重複的程式碼維護。
使用函式的情況:
- 將特定功能程式碼獨立出來,提升可讀性
- 把重複執行的程式碼包裝成函式,方便維護
- 創建遞迴函式(後面的章節會提到)
宣告一個函式
一個完整的函式包含三個部分:宣告、內容、呼叫。在這部分我會先介紹宣告的部分,其餘的會在後面的章節提到。
首先一個函式的宣告可以包含三種資訊,分別是函式名稱、接收資訊、回傳資訊,會使用以下格式來書寫。
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; }
宣告函式原型的方法,就是將一個函式刪除內文,並只保留「回傳型態、函式名稱、接收型態」,甚至連接收的區域變數名稱都可以不寫。
在這章節中我們學會了函式的宣告。下一章教你該如何宣告一個好的函式,避免因小疏忽犧牲程式的效能。
小測驗
函式可以自己呼叫自己嗎?