00:00
接下来第四章我们要介绍的是scla当中的流程控制,那关于流程控制呢,大家如果对于编程语言比较熟悉的话啊,那应该是不陌生的,应该知道常见的编程语言里边流程控制的方式主要就是三种,顺序、分支和循环啊,那常规的大家最熟悉的当然就是顺序的流程控制了,我们写出一份代码来之后啊,每一行代码,那执行的流程是什么呢?其实就是从上到下依次执行,如果我们没有别的这些特殊的流程控制手段的话,那其实就是一行一行执行,全部执行完毕。看到了这个方法,我们最后的这个画括号结束画括号的时候,那就整个执行完毕退出了,这个是最常见的啊,比较简单,那另外还有就是分支控制,分支控制的话就会发现了,我们执行这个代码的时候呢,有时候其实有一些代码我是不希望他去执行的。他或者说我是希望他在某些条件下才去执行的,那这个时候呢,就有可能我要做一个条件判断了,而且呢,还有可能在某些条件下我执行这段代码,那有些条件下呢,可能要执行别的代码,那这样的话就产生了所谓的分支,那最常见的分支控制的手段当然就是if else了,另外还有一种,还有一种当然就是。
01:22
我们满足某种条件下,一部分代码可能需要循环往复的执行,哎,不停地执行,不停的执行,直到某种条件满足的时候再去退出,那这种执行方式,控制方式就是所谓的循环控制,这三种手段在大部分常见的语言里边啊都有所对应的实现,那skyla里边也不例外,它在这些流程控制手段上跟Java基本上是完全一样的。啊,那当然了,大家可能也知道,像C语言里边还有一种比较特殊的流程控制手段,就是传说中的goto。这个控制手段是非常的灵活,所谓的got to,那就是在任意它代码里边的任意一个位置。
02:05
我都可以做一个随意的跳转啊,所以它是非常灵活,但是也非常危险啊,呃,有时候就是说你如果要是代码比较复杂,然后里边又到处用到了这个got to的话,很有可能自己都不知道怎么回事,程序就跑飞了啊,所以现在一般情况我们认为got to是一个不太好的方法啊,是一个不太安全的设计,所以说现在的很多编程语言都已经把这个goto是禁用掉的,包括Java它尽管保留了goto关键字,但是呢,实际上底层也是没有goto的实现的,是不允许使用啊,所以呃,Skyda这方面也是一样啊,当然不会允许使用这么危险的东西,所以KDA里边最常见的还是顺序分支和循环,那关于顺序流程的这个控制那就不需要讲了,它就是按照顺序从上到下执行嘛,所以首先我们要讲的就是分支控制。那分支控制主体来讲,当然就是if else了,呃,我们这里在代码里边可以给大家做一个具体的测试啊。
03:06
大家看到这个if if else,具体来看的话,其实可以分成不同的分支控制,可以有单分支、双分支、多分支,那接下来我们在代码里边做一个简单的测试。首先我们还是新的一章,新建一个package chapter04,然后接下来我们新建一个skyla的OBJECT401要测试的是分支控制。先把B方法写出来啊,那首先我们要测的是千分支,其实这个过程跟Java是比较类似的,我们在这儿给大家设计一个具体的场景吧,呃,我们主要就是可以在键盘上啊,控制台直接输入一个整数,然后呢,作为自己的年龄,那我们的程序就是把这个年龄要做一个判断,判断他到底属于哪个年龄段,比方说诶,你是成年人或者是未成年人,然后输出一句话显示出来啊,所以这个逻辑还是比较简单的,我们在外边呢,那首先你先来做一个仪式,我们先输出一句话啊,请输入您的年龄,当然如果要控制台直接做这个键盘输入的话,最后我们要给到一个变量int类型的age,那这里边我们要用的当然就是std in,然后可以接read int把它读进来,那接下来的这个单分之比方。
04:39
我们最关心的当然就是是否成年嘛,所以我们可以直接做一个判断,什么叫单分支呢?是当前的这个分支有可能执行,有可能不执行啊,就是如果要是满足条件我就执行下面的代码,不满足的话直接跳过这块,相当于就呃,这段代码就直接失效了,所以这里边我们判断的就是H如果大于等于18。
05:04
那我18岁以上的话,那当前当然就是可以输出一句成年就是最简单的单分值啊,这大家应该都比较熟悉啊,好,这个做完之后,我们可以输出一个界线,然后接下来第二个自然就是双分制了。双分制也比较简单,那当然就是if else是if条件里边我们做一个判断,满足条件,执行if下边的代码块,那如果要是不满足怎么办呢?之前单分支是不满足就直接跳过,就相当于这一块没有没有执行,那如果要是双分制的话,那就是你至少要执行进入到一个代码块里面执行,所以后面会有一个else,如果不满足条件,那就执行else下面的代码块啊啊,那所以其实大家也可以认为我们前面的这个单分支就是if,然后呢也是一个else,只不过else就是执行后面的所有代码啊,那所以有时候这个程序设计的时候,我们也可以看到啊,有些情况下我们是直接用一个if就够了,有时候呢,大家可能更习惯if else都写出来,所以其实效果是差不多的啊,所以双分支这边如果我们要做判断的话,那还是啊。
06:24
直接做一个copy,如果大于等于18的话,我们输出目前是一个成年,那如果要是else小于18的话,当然就是一个未成年了,你这个逻辑是非常的简单啊,大家也应该是比较熟悉的。下来我还是把这个copy一下,一个分界,第三个呢,是所谓的多分制了,可能自然想到了啊,那假如说我这里边如果出现了,我们这里是只能判断当前到底是成年还是未成年,那就只有两种情况嘛,那假如我要判断多种情况呢,我想把这个年龄段划分的更细致一点,比方说我要划分呃,童年对吧,青少年,然后这个青年,中年,老年,哎,那这个怎么样去划分呢?
07:11
非常简单,多分支的话,那就是if之后,然后在else if啊,然后在else if,然后最后在else,这不就是一个多分支吗?啊,大家也比较熟悉,所以我们前面,呃,我们干脆不要从18岁开始做判断了啊,我们从最小的开始做判断吧,比如说如果小于等于六岁。我们做一个判断,当前是同年,然后l if,那接下来如果A主要是角于18的话,这个是青少年啊,那当然了,接下来我们可以继续做这个LCF的判断,如果接下来它又小于今年的范围,我比方说小于35岁吧。
08:02
我们把它叫做青年。后面继续做判断,如果大于35又小于60的话,我们把它叫做中年啊,当然了,背后就是一个else,不需要再做判断了。不要输出等于等于60的话,那就是老年,大家会发现我们在做多分支判断的过程当中,其实就是不停的按照这个条件把它做这个细分的一个过程,首先我们给一个条件,是否小于等于六,如果是的话,呃,同年,那如果要是大于不不是的话怎么办呢?那就是大于六的场景了,大于六的场景再做划分,按照18岁再做一个划分,那就是大于六,小于18的时候,这个属于青少年,那如果要是大于18怎么办呢?大于18再做划分,按照35再做一个划分,啊所以大家看这里边我们看起来像是一个多分支直接铺开,但实际上如果画出这个程序执行流程图的话,它其实应该是一个应该是一个这样的树状结构,前面我们第一个条件是判断是否小于等于六。
09:16
那如果说小于等于六的话,那这里边我们直接输出的是同年,那如果要是大于六的时候,其实。我们判断这个具体的结果啊,接下来我们是要做第二重判断的,再判断它是否小于18,那同样接下来呢,如果要是小于18,这就是应该是大于六,小于18我们就直接输出青少年,那如果要是还大于18怎么办呢?啊,继续在判断它是否小于35,那同样接下来也是,如果小于35输出青年,那如果大于的话,还要继续判断是否小于60。最后才输出中年和老年啊,所以这相当于我们是这样的一个二叉数,不停的做二分差判断的结果,我们其实要不停的做四重判断啊,四次判断条件,四个判断条件依次迭代,是这样的一个流程,那自然大家想到了,那我们想象的这个多分支能不能直接就只有一个判断条件,我就判断这个H到底在哪个范围内,然后呢,那就相当于是不是一下就把它多分叉分开了呀。
10:26
如果画出树状结构的话,程序流程的这个树状结构图,那其实就应该是一个多路分叉数,能不能这么实现呢?啊,其实在C和Java里边是有这样的实现的,那就是所谓的Switch case。在skyla里边呢也类似,但是skyla里边并没有Switch关键字啊,那么在skyla里边怎么样去做这样的一个,就是直接平铺开的并行的多路分支判断呢?哎,那这个就是另外的一种方式,Scla用到了一种叫做模式匹配的方式,它用的式match case啊这样的一个语法啊,那这个关于模式匹配其实不仅仅能够做多路分支的判断,那么在SKY里面它其实能做,其实可以做很多很复杂的功能啊,是一个非常强大的功能,所以我们会把这一部分呢,放到后边的章节里边再给大家做单独介绍啊,那这一部分呢,我们就重点给大家复习了解一下if else。
11:25
可以实现这个多分支的一个判断了啊,那当然关于这个我们也可以直接运行一下,大家看看这个结果到底是什么样的。那这里的年龄,如果说我输入一个19的话,哦,大家会看到啊,前面的这个三分之和双分之只能判断出来成年,那下边我就可以具体判断它是一个青年了啊,那如果说我们重新运行一下,给一个比较小的数的话,比方说给一个五对,那么大家看分支就直接跳过,里边根本就没有输出,而双分支可以判断是未成年,而多分支呢,具体可以判断出来是同年啊,这就是关于这个if else的一个基本用法。
我来说两句