iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Mobile Development

Swift30天:從語法到觀念,告訴你在踏入實作前最好弄清楚的那些事系列 第 4

# Day4--欸不是,還要再來一遍喔?迴圈別鬧了

在Swift裡面,則有三種的迴圈,如下所述:

  1. for…in loop

  1. while loop
    我在思考這種迴圈的時候,經常都會用一個想法就是:「當….怎麼樣的情況發生的時候,會怎麼樣…」大概會是這樣的論調,去形容while,比如下面這個例子,我大概就會這樣描述:
    當number這個函數小於10的時候,就打印出number,number也會往上加2,而因為在迴圈內,所以number會一直加到9才結束。

  1. repeat while loop

這種寫法的迴圈,我都會給它一個我自己的命名,叫「後綴迴圈」,因為它的條件是寫在後面,而先給前面的動作執行重複內容。所以要我來描述的話,大概會長這樣:
重複打印number這個動作、number也會在這個迴圈內不停的加2,直到number到9這個限制為止,整個迴圈結束。

所以就理解上,這個程式就是把條件往後放了,讓它在執行的時候條件在後面執行。
不過,迴圈這件事情,雖然作為決定流程的一種方式,它還有很多延伸出來的功能,如能跳離迴圈的break、繼續執行迴圈內容的continue、多重迴圈(exiting mutiple loop)、無限循環迴圈(infinite loop)等。

迴圈中有一個很重要的概念,就是控制轉移語句,它可以決定整個流程要如何的進行,而迴圈中最常見的就是continue、break兩者:

continue we’re saying “I’m done with the current(當前的) run of this loop” – Swift will skip the rest of the loop body, and go to the next item in the loop.

  • 翻譯翻譯:我已經做完了我當前要做的事了,跳過我吧!

But when we say break we’re saying “I’m done with this loop altogether, so get out completely.”

  • 翻譯翻譯:我不幹啦,跳出迴圈啦,掰!

continue的用法主要會是這樣:

只要在continue的指令下,就會馬上的跳過這個循環圈,也就會變成上面這樣,只要是3的倍數,就會被跳過,所以打印出來的就都是3的倍數以外的數字了。

break的用法則會是這樣:

到10就沒有了。
這兩種用法、概念其實在程式語言中很常見,尤其是用在迴圈上。

另外,這邊也會再多說兩種迴圈的型態:

  1. 跳離多重迴圈(exiting multiple loop)
  2. 無限循環迴圈(infinite loop)

“as soon as the combination is found, exit all the loops at once”
假若你今天遇到一種情況,這種情況是會需要很多迴圈一起進行的時候:
你會需要這個「Outerloop」這個標籤,它代表了整個迴圈,而不是只有第一行的那個而已。

像下面這個例子:

在上述的程式碼中,我們試圖要找到一種符合[“Sam”,”Austin”,”MJ”]三個名字的組合,所以第一個、第二個、第三個迴圈分別都執行,並放在attempt這個常數裡面,假如attempt跟combination相等,那就打印出符合combination的組合,一旦找到了,就直接跳出整個迴圈。

所以假若沒有使用Outerloop這個迴圈的話,我們可能要多放兩次的break,多麻煩啊!一個Outerloop滿足三個願望!

無限循環迴圈

當你的迴圈並沒有明確的設定停損點的時候,就會產生這種瘋狂執行的情況….這個叫做無限循環迴圈,所以通常看要不是條件設多一點,可以跳出迴圈,再不然就是用個break或continue來調整一下整個迴圈的設置。

補充:其他的控制轉移語句(control transfer statement)

控制轉移語句除了上面描述的continue、break之外,還有fallthrough,但fallthrough比較特別,它只能用在Switch case的使用中,大致上意義如下:
fallthrough的主要意義,我想引用Swift起步走的說法就是:
Swift 的switch中,只要比對到一個case即會執行其內的程式,並結束這整個switch的動作,如果在特殊情況下需要執行緊接著的下一個case內的程式,就要用到fallthrough。
也就是說:一般的Switch case,會在匹配到符合條件的設置後,就跳出程式進行的結果,
而,加上fallthrough後,就會變成緊接著下一個case的內容也要執行,如下:

最常用的控制轉移語句:Return

既然都提到控制轉移語句了,不得不提到Return,它算是一種最常見的控制轉移語句,那它作為一種控制轉移語句,實質上的意思是什麼呢?

return語句用於在函數或方法的實現中將控制權傳遞給調用者,接着程序將會從調用者的位置繼續向下執行。

使用return語句時,可以只寫return這個關鍵詞,也可以在return後面跟上表達式,像下面這樣:

return
return expression

換句話說,就是return語句可以回傳值,也可以不回傳東西,但回傳一種程式執行完成的控制權:

當只寫return時,僅僅是將控制權從該函數或方法傳遞給調用者,而不返回一個值。(這就是說,該函數或方法的返回類型爲Void或())
所以,return出現的時候,通常是要回傳一個值、一個字串….諸如此類的,也有可能是代表程式這區塊執行完畢,將控制權交還給編譯人員。

綜合上述,其實控制轉移語句都是一種具有強制性的執行機構,它可以直接的跳過當前的執行項目(continue)、跳離整個程式(break)、無縫接軌的繼續下一個case(Switch case的fallthrough)、返回值或控制權(return)。

這四個項目是目前Swift中,會使用的控制轉移語句。

tags: 鐵人賽

上一篇
# Day3--向左走?向右走?再走一次?那些替你做決定的小事
下一篇
# Day5--Funny Function!一招函式打天下?
系列文
Swift30天:從語法到觀念,告訴你在踏入實作前最好弄清楚的那些事30

尚未有邦友留言

立即登入留言