函數基本介紹
在這章中,我們要來介紹在軟體世界中一個非常重要而且基本的概念,也就是函數。雖然說這個概念很基本,但軟體也會在有了函數以後而開始變得複雜,並且產生很多延伸觀念比如說遞迴 recursion、函數多載 function overloading 等等。
但這些都是以後的事,這章我們就先來介紹一下什麼是函數,它是怎麼運作的,以及為什麼我們需要函數吧!
什麼是函數?
在軟體世界中,函數是執行特定任務的一組程式碼模塊。它包含了輸入、輸出、輸出類型、宣告、以及定義。一個簡單的函數大概會長這樣:
int func(int a) // 函數宣告 { // 函數定義 //... return a; // 輸出 }
在這個例子中,我們的輸入就是變數 a
,輸出也是 a
,輸出的類型為 int
。
函數宣告即為第一行 int func(int a)
這是為了要告訴編譯器說:「嘿!我這邊有一個名字叫做 func
的函數噢!」
函數定義則是寫在 {}
內的實際邏輯,定義著這個函數負責怎樣的工作。
函數如何運作?
現在讓我們來看一個簡單的應用:
#include <iostream> // 計算平方的函數 int square(int num) { return num * num; } int main() { int number = 5; int result = square(number); // 呼叫 square 函數 std::cout << number << " 的平方是 " << result << std::endl; return 0; }
在這個例子中,我們建立了一個叫做 square()
的函數,並將計算平方的算是封裝在這個函數之中。這個函數的輸入是一個叫做 num
的變數,輸出則是這個 num
的平方數。
在程式開始執行後,電腦會先從第 8 行開始執行,執行到第 9 行時,電腦看到一個叫做 square()
的函數。這時候有趣的來了,電腦會在第 9 行放上一個「書籤」,並且去尋找 square()
的函數定義在哪裡,發現函數定義後,電腦才會執行這個函數。在執行完函數後,電腦才會回到剛剛放的「書籤」,並繼續第 10 行的程式碼直到結束。
這個感覺就像是我們讀書讀到一半時,突然需要翻到另外一頁去查找其他資料,我們會在原本的地方放置書籤,直到資料查完後,才會回到原本的那一頁繼續閱讀。
為什麼我們需要函數?
看完上面的例子後,相信你更了解函數了,是不是很簡單呢!那重要的問題來了:為什麼我們會需要函數呢?
其實函數改善了軟體設計的許多層面,比如說
- 模塊化:將程式碼分解為更小、可管理的函數,有助於模塊化整個軟體架構還有編寫程式碼過程。每個函數封裝了特定任務,讓程式碼更易於理解和維護。這也有助於團隊合作,因為不同的開發人員可以同時處理不同的函數。
- 可重複使用:有了函數後,程式碼可以在程式中的不同位置呼叫相同的程式碼,實現了程式碼的可重用性。這大大減少了冗余,促進了更高效的開發過程。
- 抽象化:函數抽象了任務的內部細節。這是什麼意思呢?這代表我們其實只要知道函數的輸入及預期的輸出,我們就可以使用它們。我們並不需要知道它們內部的運作方式。這就好比我們使用電視遙控器並不需要清楚知道它的內部運作方式,只需要知道他可以做到遙控電視就行了!這種分離增強了程式碼的可讀性,減少了潛在的錯誤,也大大提升了軟體開發的效率。
總之,函數是軟體編程中的基本概念,可以實現模塊化、可重複使用和組織良好的程式碼。通過將任務分解為可管理的單元,它們對於程式碼的可讀性、可維護性和效率做出了重要貢獻,同時促進了程式設計中的最佳實踐。