函式是程式設計中的核心結構,它是一段可重複使用的程式碼,通常用於將重複的邏輯或功能打包,能夠提高程式碼的可讀性、可維護性及重用性。本文將介紹函式的基本概念,包括宣告、參數、呼叫及回傳值,並簡要說明不同程式語言間的差異。
宣告函式是定義函式的過程,包括指定函式名稱、參數和函式主體。
我們定義一個打招呼的函式,函式名稱叫做greet
,這個函式主體是打印出「Hello!」的字樣:
def greet():
print(f"Hello!")
def
是 Python 的關鍵字,根據不同程式語言會有不同的關鍵字,例如:JavaScript 使用function
作為關鍵字,Go 則是使用func
。
參數是傳遞給函式的值。它們允許函式根據不同的輸入執行不同的操作。
我們在 greet
函式加上參數 name
,並修改函式主體,根據參數不同,打印出不同字樣:
def greet(name):
print(f"Hello, my name is {name}!")
靜態語言(如 Java, Go)需要為參數指定資料型別。例如,在 Java 中,相同功能的函式可能會這樣宣告:
public void greet(String name) { System.out.println("Hello, my name is " + name + "!"); }
執行函式的程式碼這個行為我們稱作呼叫函式。我們透過在函式名稱後方加上括號來呼叫函式。
我們先定義 name
變數並賦予 "小鬼"
,接著呼叫 greet
函式並加上參數 name
:
name = "小鬼"
greet(name) # 輸出:Hello, my name is 小鬼!
透過 return
關鍵字,讓函式可以回傳值給呼叫者。
當我們需要二次處理資料時,會希望函式將值回傳給呼叫者,讓我們再次利用這個值:
name = "小鬼"
age = 28
def greet1(name):
return f"Hello, my name is {name}!"
def greet2(age):
return f"I'm {age} years old!"
# 呼叫函式並將回傳值存進變數中
name_info = greet1(name)
age_info = greet2(age)
# 合併兩個變數並輸出結果
intro = f"{name_info} {age_info}"
print(intro) # 輸出:Hello, my name is 小鬼! I'm 28 years old!
在這個例子中,greet1
和 greet2
函式都回傳一個字串。我們可以將這些回傳值儲存在變數中,然後再進一步的處理或組合。
假設人資部門需要計算公司一百位員工的月薪,薪資組成包括:底薪、加班費和業務獎金。
# 計算小鬼的薪資
wilson_base = 30000
wilson_overtime = 10 * 200 # 加班10小時,每小時200元
wilson_bonus = 5000
wilson_total = wilson_base + wilson_overtime + wilson_bonus
print(f"小鬼的薪資:{wilson_total}元")
# 計算小翎的薪資
xiao_ling_base = 32000
xiao_ling_overtime = 15 * 200 # 加班15小時,每小時200元
xiao_ling_bonus = 6000
xiao_ling_total = xiao_ling_base + xiao_ling_overtime + xiao_ling_bonus
print(f"小翎的薪資:{xiao_ling_total}元")
# 若有一百位員工,就需要重複一百次這樣的程式碼...
def calculate_salary(base, overtime_hours, bonus):
overtime_rate = 200
overtime_pay = overtime_hours * overtime_rate
total = base + overtime_pay + bonus
return total
# 計算小鬼的薪資
wilson_salary = calculate_salary(30000, 10, 5000)
print(f"小鬼的薪資:{wilson_salary}元")
# 計算小翎的薪資
xiao_ling_salary = calculate_salary(32000, 15, 6000)
print(f"小翎的薪資:{xiao_ling_salary}元")
# 可以輕鬆計算更多員工的薪資,只需重複調用函式即可
calculate_salary
函式處理所有薪資計算,避免重複撰寫相同的計算邏輯。函式是程式設計中不可或缺的核心要素,掌握函式的概念和應用能大幅提升程式設計的效率和品質。然而,從上述案例可得知,我們其實要培養的是解決問題的思維模式,隨著經驗累積,你也會慢慢養成這樣的習慣的!