Swift Review#13[迴圈系列-continue、break、outerloop label]補充:控制轉移語句(fallthrough、return)

影山小麥機
Jun 29, 2021

前言

上一篇基本描述的就是最簡單的迴圈的形狀,接下來則會另外描述比較特殊的迴圈,以及迴圈因為會使用控制轉移語句(control transfer statement),本篇也會在額外的提到有哪些語法可能會使用控制轉移語句,並做實例的練習。

正文

迴圈中有一個很重要的概念,就是控制轉移語句,它可以決定整個流程要如何的進行,而迴圈中最常見的就是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,就會跳開整個迴圈,所以可以看到結果如下:

到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的內容也要執行,如下:

number產生了亂數後,就會進到Switch case的流程裡,但由於亂數數值是5,所以直接fallthrough了一次,進到7…10的case,然後直接執行裡面的內容,打印了Middle Middle,接著又一次fall through,所以直接進到11…15的case打印了Max,結果如下:

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

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

借用億聚網的說法:

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

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

return
return expression

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

當只寫return時,僅僅是將控制權從該函數或方法傳遞給調用者,而不返回一個值。(這就是說,該函數或方法的返回類型爲Void())

所以,return出現的時候,通常是要回傳一個值、一個字串….諸如此類的,也有可能是代表程式這區塊執行完畢,將控制權交還給編譯人員

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

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

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