00:00
啊,下午呢,我们接着来讲解我们的课程,我们上午已经讲到哪了呢?各位我们已经讲到了控制抽象的,呃,这个基本介绍,那现在呢,我们来走一个控制抽象的一个应用案例来,我举个例子,那么这个控制抽象可以实现什么效果呢?这个控制抽象结合刚才我们讲的这个函数的颗粒化和会实现一个特别有意思效果,就是实现这个while循环的效果。来,我让你们写一个代码,大家看看能不能写出来,比如说我现在有这么一一个循环,看看大家能不能自已写出来它的实现方式。好,我写一段代码。叫还叫control控制abstract。哦,这个应用吧,APP。来写一段代码。呃,我们看以前这个Y循环,假如我这有个变量叫X等于十,看懂了啊,然后呢,我们以前这个Y循环是怎么写的?Y循环如果X假设它大于零,假设它大于零,我们就让这个X减一,然后呢,输出一句话,X等于加X。
01:25
写完了。诶,这段为什么错了呀,同学们是不是因为我这个变量要写成VR,好同学们看输出代码就是从九到。运行大家看,从九到零,一共十次,这是一个while循环,好,我现在要求大家干什么呢?能写出自己的一段代码就是我们。我们可以模拟我们使用使用这个控制抽象。控制,哎,控制抽象写出啊写写出一个u tr,我们假设叫u tr函数啊,UR这个方法也可以叫u tr函数,实现类似的效果。
02:12
实现。实现类似的效果。那么我来写这个东西,大家看看你们能不能看懂啊,你们能看懂其实挺简单一段代码,这张我写了一个这样的东西看。把这个拿过来。我稍稍的改改一下。我们这次呢,自己写一个这个while是人家的吗?以前是人家写的111个代码块嘛,我们自己写,假设我写的叫。这个UR,然后呢,我接收一个控制抽象。我接受两个控制,这个我接受两个函数都是,一个是没有传入,没有没有那个传入值,但是呢,有一个返回布尔的,另外一个呢,就是没有传入值,也没有返回值的,这个呢,也是u tr,然后你看我的代码。
03:03
大家看我的代码,我怎么写的,我这样写,如果这个u tr为真。我就去执行这个代码块,然后递归调用,然后递归调用这个u tr。诶,大家看这段这个U这个函数其实就实现了这个外部循环,那有时候是怎么用呢。怎么用呢?非常的简单,你看我这写了一个,我来给你们用一下,怎么写啊,你看啊,我还用这个X,那么我这个X呢,我在这儿先把它重新赋为十。然后我写U。然后里面我传什么东西你知道吗?好,同学们看,我传一个条件进去,而这个条件本身是没有传入职的,其实就相当于我直接传一个代码块,什么代码块呢,就是X大于零。看到没有,没有办法没问题吧,然后一个大括号,为什么大括号,因为里面这个是不是可以接收一个代码块,这个代码块我就直接把这个传进去,同学们看代码写完了。
04:13
多么有意思,你看这个地方,你乍看一眼好像,诶诶,这个东西好像真的很像外循环。而的的确确,Y2循环的底层,它也是这样类似实现的。它其实就是反复的调用,那不然它怎么实现的呢。你看我们这个写了这个东西,我们从某个角度来上,已经和外网非常相似了。但是底层呢,用的是控制抽象,来我们玩一把,看看能不能跑起来啊各位同学,我现在呢,先把这个进行一个注销。进一步注销,我这里为了好看呢,就叫1T啊里面的X,它在它一共也会输出九到零的效果来跑一个。运行。那么运行完了过后,同学们看这代码你看。
05:01
其实跟这个外循环就一样了,所以说我们这个控制抽象呢,可以实现这样的一些效果,还是非常有意思的,如果你没有去学这个东西,你几乎是很难理解他是怎么回事的,明白没有,对吧,你其实这样再看再看哦,原来这个地方是传入了一个。匿名的函数,这谁能看的出来呢?很难看出来吧,这个地方又是什么呢?又传入了一个匿名的函数,所以说我们讲这个SC,它是以这个函数作为一等公民来进行编程的,一点都不假。但是你很难从这地方很难再看出这个函数的这个影子了,但本质人家就是一个匿名的函数,所以以后呢,看东西要看到它底层的一个实现。OK,好,这是老师给大家用我们的这一个控制抽象实现类似while循环的u tr函数啊,这个跟我这写的稍微有点区别啊,我干脆把它替换成我这个吧,因为这个原先这个PPT里面这个案例呢,呃,不是很好,我把它改一下。
06:11
我稍微把它改进一下啊呃,在哪改进呢?就把这个取取反改一下,然后把这个大于这个改成它啊,大于它这样子一样可以看到效果啊,以前我是取反讲起来比较吃力,因为这个本身传进来还要取下反,大家就看懵了,所以我干脆改进一下,好同学们,那关于我们这一个。啊,就是控制抽象的一个应用,我们就说到这里,我们截取一段代码给大家放到这来,OK。好,往下走。往下走呢,咱们继续往下玩,来了一个控制抽象的,呃,最那个应用案例。大家写的啊,使用使用控制抽象实现,实现什么呢?While的一个函数。
07:06
啊。OK,我们来一个小标题,那具体的代码呢,我给大家拿过来就可以了,下面这个代码我就不要了啊,下面这个代码我就不要了,大家应该应该能看懂什么意思啊,就是反复的调用吗?你这个不仅把这个代码框又传给他啊,把这个这个你这个判断条件传给他,其实就是命名函数又传过去,Block这个代码代码块又传进去,其实把把它反复的往里面传,那最后因为这个X呢,它是一个外部的变量,所以说最终它会。为这个forces会for的,就退出这个递归了,好的,我给大家放置到这里。Okay。插入一个小表格。好,我们截取一段。
我来说两句