Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ch07. 函式.

Similar presentations


Presentation on theme: "Ch07. 函式."— Presentation transcript:

1 Ch07. 函式

2 7.1 定義與呼叫函式 假設要輸出小時候每人必須背的九九乘法表,如下表所示:
7.1 定義與呼叫函式 假設要輸出小時候每人必須背的九九乘法表,如下表所示: ************************************************** ************************************************

3 範例程式 import Foundation func printStar() { for _ in 1...50 {
print("*", terminator: "") } print(" ") func multiply() { for i in { for j in { print(String(format: " %4d", (i*j)), terminator: "") printStar() multiply()

4 函式的參數 上一範例程式輸出50個 *。若要讓使用者決定多少個 * 時,則可 以在呼叫函式printStar給予參數 (parameter),以決定 * 的數目。

5 範例程式 import Foundation func printStar(starNumber: Int) {
for _ in 1...starNumber { print("*", terminator: "") } print("") func multiply() { for i in { for j in { print(String(format: " %4d", (i*j)), terminator: "") printStar(starNumber: 50) multiply()

6 函式的回傳值 若函式有回傳值,則必須加以設定回傳值的資料型態。

7 範例程式 func sum(number: Int) -> Int { var total = 0 for i in 1...number { total += i } return total let i = 100 let tot = sum(number: i) print(" \(i) = \(tot)")

8 輸出結果 1+2+…+100 = 5050

9 回傳多個值 可使用tuple型態回傳多個值。 tuple是有序的成員集合。

10 範例程式 // return multiple value
func sumAndMean() -> (sum: Int, mean: Int) { let data = [1, 2, 3, 4, 5, 6, 7, 8 ,9, 10] var sum = 0, mean = 0 for i in data { sum += i } mean = (sum) / (data.count) return (sum, mean) let counter = sumAndMean() print("sum = \(counter.sum), mean = \(counter.mean)")

11 輸出結果 sum = 55, mean = 5

12 7.2 函式的參數名稱 函式的參數名稱在 Swift有一些變革,如參數有區域與外部參數名 稱之分、預設參數值、可變的參數個數,以及inout參數。

13 外部參數名稱 一般函式的參數名稱基本是屬於區域參數名稱 (local parameter name) 。

14 範例程式 // function parameter func sum(n1: Int, n2: Int) -> Int {
var total = 0 for i in n1...n2 { total += i } return total let calculate = sum(n1: 1, n2: 100) print(calculate)

15 輸出結果 5050

16 7.2.2 預設參數值 參數當中可以先預設其值,好比C++ 的多載函式(function overloading) 。
預設參數值 參數當中可以先預設其值,好比C++ 的多載函式(function overloading) 。 預設的參數值一定要從後面的參數開始設定,不可以第一個是預 設參數而第二個參數不是預設。

17 範例程式 // default parameter value
func sum3(from: Int, to: Int = 100) -> Int { var total = 0 for i in 1...to { total += i } return total let calculate4 = sum3(from: 1) print("1加到100的和為: ", terminator: "") print(calculate4) let calculate5 = sum3(from: 1, to: 10) print("1加到10的和為: ", terminator: "") print(calculate5)

18 輸出結果 1加到100的和為: 加到10的和為: 55

19 可變的參數個數 若要傳給參數的個數是不定數的話,Swift 提供所謂的可變參數 (variadic parameters),這可讓參數的個數更加的有彈性。

20 範例程式 // variadic parameters func sum(numbers: Int...) -> Int {
var total = 0 for i in numbers { total += i } return total let data1 = sum(numbers: 1, 2, 3, 4, 5) print("data1 = \(data1)") let data2 = sum(numbers: 1, 2, 3) print("data2 = \(data2)")

21 輸出結果 data1 = 15 data2 = 6

22 7.2.4 參數的型態 參數型態可分為常數 (constant)、變數 (variable) 與inout型態。
參數的型態 參數型態可分為常數 (constant)、變數 (variable) 與inout型態。 前面所談的參數型態皆為常數型態 。 變數型態的參數則可以在函式內更改,這少掉在函式要再宣告另 一變數的好處。

23 範例程式 // parameter type func left(str: String, count: Int, repChar: Character) -> String { var str = str let amountReplaced = count - str.characters.count for _ in amountReplaced { str = str + String(repChar) } return str let originalString = "Swift" let repString = left(str: originalString, count: 12, repChar: "*") print(originalString) print(repString)

24 輸出結果 Swift Swift*******

25 7.3 函式型態 函式的型態有許多種,一為無參數也無回傳值型態。 當有參數和回傳值時,就必需加以寫出。

26 函式型態當做變數的型態 可以將變數的型態宣告為函式的型態,即表示變數將參考到某一 函式 。

27 範例程式 //有一參數且有回傳值 func evenOrOdd(num: Int) -> Bool {
if num % 2 == 0 { return true } else { return false } var evenYesOrNo: (Int) -> Bool = evenOrOdd if evenYesOrNo(5) { print("5 is Even") print("5 is Odd")

28 輸出結果 5 is Odd

29 函式型態當做參數的型態 將函式型態當做變數的型態以外,也可以將函式型態當做是函式 的參數型態。

30 範例程式 func mean(data1: Int, data2: Int) -> Double { return Double(data1+data2) / 2 } func printMean(meanFunction: (Int, Int) -> Double, a: Int, b: Int) { print("(\(a) + \(b)) / 2 is \(meanFunction(a, b))") printMean(meanFunction: mean, a: 8, b: 7)

31 輸出結果 (8 + 7) / 2 is 7.5

32 7.3.3 函式型態當做回傳值的型態 func incremental(input: Int) -> Int {
函式型態當做回傳值的型態 func incremental(input: Int) -> Int { return input + 1 } func decremental(input: Int) -> Int { return input - 1 上述定義了兩個函式,分別為incremental和decremental,而且函式 的型態皆為 (Int) -> Int

33 撰寫一函式chooseFunction,它有一參數increment用以判斷要呼叫incremental或是 decremental函式。
func chooseFunction(increment: Bool) -> (Int)-> Int { if increment { return incremental } else { return decremental }

34 範例程式 func incremental(input: Int) -> Int { return input + 1 }
func decremental(input: Int) -> Int { return input - 1 func chooseFunction(increment: Bool) -> (Int)-> Int { if increment { return incremental } else { return decremental var number = 6 let moveToZero = chooseFunction(increment: number < 0) while number != 0 { print("\(number) ", terminator: "") number = moveToZero(number) print(0) print("end")

35 輸出結果 end

36 7.4 巢狀函式 若一函式內又包含。其它函式,則稱此函式為巢狀函式 (nested function) 。

37 範例程式 //nested function
func chooseFunction(increment: Bool) -> (Int)-> Int { func incremental(input: Int) -> Int { return input + 1 } func decremental(input: Int) -> Int { return input - 1 if increment { return incremental } else { return decremental

38 7.5 區域與全域變數 定義在函式內部的變數稱為區域變數(local variable)。
7.5 區域與全域變數 定義在函式內部的變數稱為區域變數(local variable)。 定義在函式外面的變數稱之為全域變數(global variable)。

39 範例程式 // global or local variable var i = 100 func globalOrLocal() { let i = 200 print("local i = \(i)") } globalOrLocal() print("global i = \(i)")

40 輸出結果 local i = 200 global i = 100


Download ppt "Ch07. 函式."

Similar presentations


Ads by Google