00:00
接下来我们要介绍的就是scda当中最后一种常见的流程控制手段,就是所谓的循环,那循环里边最经典的最常见的当然就是for循环了,C里边有,Java里边有,Skyla里边也有啊,这个基本上跟Java的设计都是完全一样的啊,也是兼容的,但是呢,跟Java不同,Skyla里边的for循环。语法有所区别,而且呢提供了特别多的新的特性,所以在skyla里面可以说for循环是非常强大,也是非常灵活的啊。那么这些for循环的特性呢,它集中体现在具体的一个写法上,我们把它叫做for的推导式,或者叫for表达式,接下来我们就在代码里边具体的看一看skyla当中的for循环是怎么实现,那首先我们还是在CHAPTER04包下边去新建一个。Object对象,单例对象在当前我们测试的S02是for循环for loop。
01:04
然后我们把命方法先写出来,首先我们先回忆一下二里边的写法啊,阿法for语法,呃,最常见的这种写法当然就是一个for,首先我们后面是要定义当前的一个循环变量啊,一般情况下,比方说我们这个int I等于零,然后I小于值啊,比方说啊,我们要循环十次,那大家知道就是I等于零,I小于十,那就取不到十嘛,那就是从零到九,那后面我们还要有一个含变量的更新,I加价,每一次加一的话,从零取到九,总共就是执行十次,运行十次啊,那比方说后面我们想要直接去啊一个hello word打印十次的话,那就是system.out.print line hello word,哎,这就是我们常见的一个用法啊,那循环最常见的当然就是说把一句话,比方说我们直接循环打。
02:05
中十次啊,那另外还有一个常见的需求,就是每次打印的时候呢,我们可能还要带上当前是第几次输出,那这个我们的循环变量就非常有用了,它不光是做一个这个退出循环的控制,另外我们也可以把当前到底是第几次循环作为一个编号输出,比方说我们这里可以把I直接加在前面,哎,那这样的话,这就是我们当前的一个控制啊,几次的hollwood就可以显示在这儿了。是Java里边的写法,那这种写法大家其实发现了啊,里边我们这个for的这个条件控制其实稍微有点复杂,我们首先是定义了一个循环变量,然后呢要给它赋一个初值,另外呢,还要定义它每一次循环。执行完毕之后,这个循环变量怎么样改变,还得定义一个退出循环的标志啊,那首先这个是比较繁琐,另外经常困惑我们的一点就是当前初值我们经常是从零开始的啊,特别是我们如果要是取那个数组的下标索引的索引位置的话,它都是从零开始的嘛,啊,那这里面我们就涉及到一个后边的这个退出循环的标志,这到底应该是小于还是小于等于呢?
03:19
哎,这当前的这个边界到底取还是不取,往往会让我们比较麻烦啊,总要想一想才能得到结论,容易出错,哎,那所以盖拉在设计的时候就想到,呃,Java里面的这些特点我都不要,我需要让。程序员使用for循环的时候没有那么多的困惑,用最简单的方式实现我的功能就好了,比方说现在我要带着当前的编号输出十次hello word啊,那我只要怎么样就可以了呢?是不是我只要遍利一个,相当于就是遍利一个一到十的范围,然后把这个作为一个编号添加在这个hello word前面打印输出就完事了呀。诶,所以我当前如果要定义循环变量的话,定义一个I,只要知道它从比方说从零取到九,或者从一取到十,只要定义这个不就完了吗?那根本没必要考虑这么多边界条件。所以在GALA里边最常见的一种循环的使用就是范围便利。所以我们接下来首先来看看这种模式,我们看看这个for表示你怎么写SC里面的语法,一个for,然后先写出循环变量啊,然后后边怎么写呢,这里有一个特。
04:34
的语法是一个小于号,再加一个连字符,看起来有点像向左的一个一个箭头,哎,那它表示什么呢?它就表示从后边的这个范围里边,后边是一个范围,后边这个范围里边取值,取出来的值赋给当前的变量I,循环变量I,哎,也就是说,哎,你不用定义它加加什么的啊,我就是从后面那个范围取就完了,一个一个取,那后边的范围又怎么定义呢?比方说当前我是像我们上面这个啊,这是从零到九,哎,那我这里就是零兔有,那大家看这个英文语法上非常的简单啊,从零到九。
05:17
对吧?啊,相当于十个数都要取一遍,那有时候我们不想从零开始啊,从零开始往往我们又搞不清楚你到底是有几次,那我干脆就从一到十不就完了吗?所以这样的话会更加的简单,一看一目了然,I从一取到十,然后里边我们直接print line,把对应的这个一个打印。哎,这就是我们想要的这个结果,现在大家输出一下,可以看到执行的结果就是从一到十有十次,Hello word的输出,这就是用for进行范围便利的一个方法啊,那大家可能看到这个使用确实是非常简单,但是呢,可能会有点困惑,这里边的这个用法,这个语法到底是怎么一回事呢?哎,这里要给大家解释说明的是,后边这个一到10ONE two ten,它表示的其实就是一个范围。
06:13
那这个范围为什么这里有一个to直接,难道这是一个关键字吗?我们之前看加拉里面关键字的时候,好像没见到这样的关键字啊,这里做一个解释,它其实并不是关键字,它其实是什么呢?是一个方法调用,大家还记得之前我们讲到呃,就是运算符的本质的时候,其实提到了它都是方法调用,那这里面的to呢,同样也是前面一一可以作为一个作为一个整形的对象嘛,所以我们这里边同样是一个int类型对象的方法调用,调了一个to方法,所以前面的这个for推导式其实我们可以写成。I列哪一个范围呢?就是一来看到它的不方法,然后后边不式是完全一样的一个写法啊,所以我们可以看到这个本质到底是什么啊,如果我们用这一个方法调用的方式的话,写起来还是有点繁琐,那前面我们提到在scla里边对象的方法调用,我们可以省略点。
07:23
只要中间空一格就可以了,然后呢,后边同样是空一格,再写它的参数,如果参数只有一个的话,括号也可以省略,所以大家看这样写出来的话,这就完全符合我们的英文语法吧,那就是一到十,一目了然啊,这个运行我们也可以看到结果是完全一样的。输出一到十,Hello word啊,这就是关于这一个表达的方式,它的底层到底是什么啊?其实就是一个对象的方法调用,那如果有同学比较较真的话,点进去你会看到的to方法其实是reach in这个类下面的一个方法啊,那大家可能又会有所疑疑惑啊,本来我这里边一默认它不是int类型吗?怎么这里边又冒出来一个richt呢?调的方法怎么跑到这里来了呢?难道是说,呃,大家看这里边这个I的类型我们其实省略了啊,用一做推断啊,呃,难道说这个int它继承了这个rich int吗?或者说跟rich in有什么关系吗?
08:25
首先继承关系,这里肯定没有int本身继承字的,只有any value啊,就是这是它的这个父类,那rich int又是怎么出来的呢?诶这就提到了,必须要提scla里边比较特殊的一个,也是比较强大的一个功能了,就是所谓的影视转换啊,那这个功能呢,大家可以看到啊,在这个SC里边现我们不是接触过有一个被dif这样的一个一个类吗?啊,它里边比较特殊啊,当然这这是本身是一个对象了啊,大家可以看到在这个里边定义了很多基本的类型,定义了很多啊基本的一些变量啊,一些参数,另外还有很多我们可以看到,最后有很多所谓的。
09:12
低优先级的影视转换,在这些影视转换里边,比方说这里int有一个int rapper,它就可以对于int类型做一个包装,这里边如果给一个int类型的对象传过来,就可以把它包装成一个返回一个reach int啊,所以大家看就是在这里边做了对应的一个影视转换。那关于这个影视转换又是怎么一回事呢?简单理解的话就是,诶,如果我们前面自己写的这个代码啊,本身基于这个int类调方法,能调到这个编译能通过的话,那就直接调int里边的方法,那如果要是说int里边没有to这个方法,那怎么办呢?诶,那编译器就会自动的找到有关的一些影视定义里边,看能不能把这个int做一个包装转换,然后调对应的图方法啊,那这里边我们就调到了这里的这个影视转换,把它转换成了reach int。
10:07
关于影视转换,影视声明的这些方法,我们会在后边的一个章节里边专门给大家做介绍啊,这部分确实会比较深,也比较复杂啊,我们可以放到后面再做详细的了解,那现在大家只要知道啊,我们最终调用的是reach in里边的to方法,那它返回的得到的是一个什么东西呢?大家看到了,是一个range下,Range下边的一个inclusive inclusive,这又是个什么东西呢?呃,首先这显然是一个方法调用啊,方法调用,然后这里边返回的就是new了,一个inclusive返回的类型就是range下边的inclusive,这明显这是一个类型了啊,那所以我们点进去会看到它是一个final class,当然了,本身继承自range,同时呢,它又是range的这个半生对象,Object里边的一个内部类,所以你看前面他返回的时候是range.clusive。
11:07
那同时他还继承了range,那range本身又是一个类了啊,那大家看到所谓的range就是范围嘛,为什么我们说范围便利呢?所以它的底层其实就是这样的一个类型。这其实本质它是scla里边的一个集合类型,我们看后边它继承的是scla.collection里边的abstract seek啊,它是一种抽象的。序列对吧?Sequence类似于这样的一种抽象序列,那关于集合相关的类型,相关的一些用法呢,我们会放在也是后边的章节给大家再做详细的讲解。现在大家只要知道range其实就是一种特殊的集合类型,我们现在得到的就是这样的一个类型啊,这样就够了。所以我们后边的这个一到十,它表示的其实就是创建了这样一个类型的具体的对象,我们要便利的呢,就是从这个对象里边拿出这个润质里边它是个集合类型嘛,所以里边当然有元素了,那它的元素又是什么呢?当然就是一二三四五六七八九十十个数了,我们便利它就是把这十个数分别付给I,然后依次去执行下面的代。
12:22
这就是范围便利的原理。
我来说两句