Swift Review#15–1[函式Function-函式作為參數、返回型別以及巢狀函式(Nested function)]

前言

繼Swift Review#15提到了所謂的拋出函式(throwing function),本文接著要談三種相似,卻又完全不相同的函式。

  1. 函式作為參數型別
  2. 函式作為返回型別
  3. 巢狀函式(nested function)

原則上,我們在過往所及的函式皆為全域函式(global function),意即:你今天只要寫好了某個函式,那它在你的編譯器中,都是可以被使用、應用的。

而第三者巢狀函式則有不同,如果我們要描述它的結構,可以暸解到:巢狀函式就是一個函式包著函式的狀態裡面的函式只能被包在外部的函式應用,也可以被當作返回值返回其他地方使用。

以下將以上述所及的三個重點作為主要說明:

正文

1.函式作為參數

Well,函式作為參數這件事情,你大概就心裡有個底,函式的型別大概會是這樣:( )->( )、(Int)->(Int)……etc

這是一個很巧妙的設計,而在實例中,則如下:

你可以看到outsideFunction裡面承載了三個參數:第一個是someFunction、第二個是a ,第二個是b,而三者共同建構出打印的字串:”Result\(someFunction(a, b))”

這個時候,我們到外部來看,我們呼叫outsideFunction,然後就把三個參數個字塞了進去:insideFunction、4、50三個參數。

你看到了嗎?insideFunction可以這樣做為參數被使用的,但要記得它的型別!不然你就得debug了

2.函式作為返回型別

函式作為反回型別這件事情,跟上面的做為參數就不同了,因為返回型別是「傳回來的東西」,所以可以注意的事情則是這樣:

我們可以看到在someFunction這個函式,它參數型別設定是傳入布林值傳出函式型別(Int)->Int,而這個函式要我們返回一個三元運算子的運算,

三元運算子的內容是這樣:假若Bools是true,則走returnFunctionA,false,則走returnFunctionB。

ok,這個時候下面的someFunction(number>0)就是一個比大小的機制,它拿number來比,結果就是大,結果為true。

下面true就傳入了finalFunction,既然傳入值是true,那勢必就選了returnFunctionA作為內部的另一個函式,所以這個時候,finalFunction(10)的10就是returnFunctionA的傳入參數了。

3.巢狀函式

Swift起步走對巢狀函式的詮釋

如果將函式建立在另一個函式中,稱作巢狀函式(nested function),被建立在其內的函式只能在裡面使用,也可以當做返回值返回以讓其他地方也可以使用

意即:我們在函式A裡面建構的另一個函式B函式B只能在函式A裡使用,

巢狀函式的邏輯我就不再多說了,因為它大部分的程式碼跟2.函式作為返回值的部分是幾乎一模一樣的,只是把someFunction移到最前面,然後讓下面returnFunctionAreturnFunctionA兩者縮排到someFunction的作用域裡面。

這樣就可以知道,誰是這個函式的老大,誰是小弟。

綜合上述三者:

  1. 函式作為參數傳入,唯一要注意的就是傳入參數的型別要和要傳入的參式,型別要一樣。
  2. 函式作為返回型別,也同樣是注意返回參數型別是什麼?
  3. 巢狀函式則是要記得縮排,讓編寫程式的人知道誰是外面包著的函式,誰是在外面包著的函式作用域底下的函式。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response