Function是用來處理特別任務的一垞程式碼。我們會幫function取一個名字來表明他要做什麼事,並且呼叫他去執行我們需要做的事情。 Function可以依需求來決定是否代入參數;每個function都有一個型態,並可回傳本身的型態給呼叫他的程式碼。

 

Defining and Calling Functions

當我們定義一個function時,可以定義一個或多個輸入的參數名稱,以及輸出的型態名(可有可無)。

當我們給function參數時,參數的型態跟順序要跟當時定義好的function 一樣。

我們先試著定義一個function叫 sayHi(_:),我們會輸入使用者名字(String type)以及輸出一組打招呼的字串(String type):

func sayHi(personName: String) -> String {

    let greeting = "Hello" + personName + "!"

    return greeting

}

上面的例子來看,function的參數會寫在名稱後的()內,回傳型態則是寫在->之後。

如果我們不需要輸入參數,()內可不填;如果我們不需要回傳型態,->可不寫。

提醒一點,若是我們沒有回傳型態時,function 實際上仍然會有一個回傳型態,叫做Void。他是一個空的tuple,裡面沒有任何參數,也可以寫成()。

 

回傳值若是用不到我們也可以不用理他,不過若是我們有可能會有回傳值的話,還是要記得在最後回傳,不然會有問題。

若是function需要回傳多個數值,可以利用tuple:

 

func minMax(array: [Int]) ->(min: Int, max: Int) {

    var currentMin = array[0]

    var currentMax = array[0]

    for value in array[1..<array.count] {

        if value < currentMin {

            currentMin = value

        } else if value > currentMax {

            currentMax = value

        }

    }

    return (currentMin, cuttentMax)

}

上面的例子是將陣列裡的數字取出最大及最小,並回傳出去;當我們執行這個function時,接到的型態便是tuple:

let bounds = minMax([1, 40, -99, 74, 12])

print("min is \(bounds.min) and max is \(bounds.max)")

而且tuple參數的名稱就是function 裡定義好的變數名稱

 

當我們的回傳型態為tuple但不一定有值會回傳的話,我們可以使用optional tuple 做為return type;以上面的例子來看,若是輸入的陣列是空的,執行起來就會出問題,因此改寫為:

 

func minMax(array: [Int]) ->(min: Int, max: Int)? {

    if array.isEmpty {return nil}

    var currentMin = array[0]

    var currentMax = array[0]

    for value in array[1..<array.count] {

        if value < currentMin {

            currentMin = value

        } else if value > currentMax {

            currentMax = value

        }

    }

    return (currentMin, cuttentMax)

}

 

Function Parameter Names

上面的一些例子,我們在呼叫function時的長相:

sayHi("Toby")

minMax([1, 3, 2, 4, 5])

若今天是多個參數代入時,比較難看出要代入的是什麼東西。

其實參數有兩種名字,一個是external parameter name,一個是local parameter name。

external parameter name 用來標示代入function的參數名稱;

local parameter name 則是在function實際上執行的名稱。

若我們沒有特別寫的話,第一個參數裡的external parameter name 是被省略的,第二個以及之後的參數會將local parameter name 當成external parameter name。

 

func myFunction(firstParaName: Int, secondParaName: Int) {

}

myFunction(1, secondParaName: 2)

呼叫的時候就會變成上面這個樣子。

 

Specifying External Parameter Names

當我們需要更易讀的function 時,可以定義好參數的兩個名稱:

func myFunction(externalParameterName localParameterName: Int) {

}

以剛剛sayHi的例子來改寫:

func sayHi(to person: String, and anotherPerson: String) -> String {

    return "Hello \(person) and \(anotherPerson)"

}

print(sayHi(to: "Eason", and: "Jacklen"))

當我們呼叫sayHi時,可以很直白的看出來這個function大約會做什麼事。

 

若是我們要將第二個以後的參數external parameter name省略,在local parameter name 前面加個底線就可以了:

func myFunction(firstParaName: Int, _ secondParaName: Int) {

}

myFunction(1, 2)

arrow
arrow
    全站熱搜

    Eason 發表在 痞客邦 留言(0) 人氣()