# 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: 铁人赛

<<:  DAY19-动态规划(二)

>>:  [DAY04] 建立 Datastore 和 Dataset (下)

Day18 蒜香鲷鱼义大利面

昨晚群组热烈的讨论鱼排,从土魠鱼排、澎湖白金土魠鱼排、白鲳、鮸鱼、嘉鱲等等,让人好想来块煎的恰恰的鱼...

永远不回头的离职档案管理

或许有人会说:「离职前就给他摆烂,什麽都不要做,以後主管打电话来讨档案,也不要接,反正我不在这间公司...

[12] 增加 input 输入功能

接着 input 输入的各种功能才可以制作介面互动 所以这边我们使用套件input npm i in...

110/18 - Android 10以上图片剪裁

Android 10以上就很简单,直接使用MediaStore抓到图片路径,然後送给图片剪裁就好 i...

NIST 通用风险模型-威胁来源

-NIST 通用风险模型 (NIST SP 800-30 R1) NIST 通用风险模型描述了威胁...