00:00
我们已经学完了scla当中所有的运算符,大家会发现其实scla当中的运算符跟Java是非常相似的,它的运算规则也非常的类似,只有一些细节可能稍有不同,那大家可能会想啊,那在Java里边我们定义这个运算符的时候,就是定义好了之后就这么用啊,语法就符合这个规则就就可以了,那么编译器会帮我们把它自动的转换成相对应的这个字解码,那在SKY拉里边是不是也是这样呢?诶,这里边我们还要介绍1.skyla当中跟Java的不同,那这一点不同呢,可以说是在语言设计上面,本身的设计思想上面就产生了很大的变化,尽管形式上我们看到它的用法跟Java是一致的,但是呢,在skyla里边运算符本质上是不一样的,那么在SC里边到底是什么呢?所以接下来我们说一下GALA当中运算符的本质。
01:02
在盖拉当中,所谓的运算符其实只是一个人为的规定而已的。底层我们都把它当做。对象的一个方法调用来使用,哎,所以所谓的scda当中的运算符,它的本质都是一个对象的方法调用,哎,这是什么意思呢?我们还是举一个具体的例子,比方说我们这里边给两个整形的这样一个N1的值是12,然后给一个N2,它的值是37,大家知道我们如果要让这两个数做一个相加计算,然后想要把这个结果做一个打印输出的话,当然可以直接N1加N2,这个是没有问题的,但是它实质上底层的本质是什么呢?它底层的本质其实是N1本身是一个int类型的对象,那就是我们定义一个数,它也是一个int类型的对象,所以这里边它是可以调它的方法的,那么int类型本身它的对象就可以调一个方法,叫做啊,叫做这样的一个方法,所以大家会发现啊,之前我们不是说过为什么在scla当中的方法名称,它的变量名称,还有这个呃,对应的这个类名啊,它的标志符是可以用符号或者符号的组合直接去做定义的吗?哎,那这里边就大家看到了啊,我们可以直接把这个方法就定义叫做,它这个名字就叫做加。
02:42
那接下来我调这个加这个方法,那后边传的参数是不是就是我相加的跟它相加的那个数啊,哎,这个时候得到的结果其实就是N1加N2。所以现在我们对于加法的理解,它就不是连接两个数的一个操作了,而是N1,就是任意一个一个数啊,它可能都可以掉这样的一个方法,它的方法表示的就是以自己作为一个加数,然后呢传入参数作为另一个加数做一个加法计算。
03:17
哎,所以大家看,这就是scla里边的一种设计思想,就是所谓的一切皆对象,一切都是对象的方法调用,这才是真正意义上的面对对象的思路呀,啊,所以大家看,就是通过这一点我们也能看出,SKY比Java确实是要更加的面对对象,他真正在。底层的设计思路上都是用这种方式来表达的啊,那有同学可能会想,那为什么我们直接写这个N1加N2也是对的呢?哎,那就是因为为了兼容大家之前Java和C里边的这种习惯啊,这种表达,而且我们在数学计算上一般也就直接an加N2,不会写成这样,写成这样多麻烦多别扭啊,哎,所以要按里边规定啊,或这个对象的方法调用的时候呢,可以直接比方说我们这里边有这样的一个点对吧,我们可以直接省略点去做这个方法调用啊,也就是说我可以直接空格,然后它后边给上这个它的参数N2,就是我们说的,为什么一般情况我们写这个计算运算符的时候啊,最好中间要加上这个空格啊,当然对于这个加而言,即使你不写空格,编译器自动也会把这个空格补出来啊。但是为了方便。
04:39
这个语义更加的明晰啊,我们做这个方法调用的时候,一般情况都要加上空格,它其实是表示省略了方法调用的这个点之后的这个结果可以写成这样,而且更进一步呢,那就是大家看到后面这个方法是不是只有一个参数N2啊,在只有一个参数的前提下,我可以把小括号也省略掉。
05:02
哎,那这样得到的就是我们完美的大家更加熟悉的N1加N2这样的表达吗?跟之前的习惯Java c里面的表示也就完全一样了啊,大家如果运行一下的话,你会发现他们得到的结果都是一样,都是12加三十七四十九。呃,那这个表示其实并不仅仅局限在一个整形的这样的一个变量,对吧?哎,那比方说我们这里边直接定义一个double类型的一个值1.34,那大家看我如果直接去啊它的耳心,然后里边随便给一个25,但这样写也是正确的,表示什么呢?就是掉了double类型的对象1.34,它是一个double类型的对象,掉了它下边的点心这样一个方法,那这个方法其实就是做乘法计算了,然后把25乘传进来,哎,所以大家看这这样一个表示。
06:00
即时就跟我们平常所写的烂1.34,然后空格省略这个点的方法调用,然后省略参数,只有一个参数时候的这个小括号,这个写法是完全一样的,能够得到一个double类型的结果啊,这就是。关于这个运算符本质的一些介绍啊,那当然了,有同学可能较真的话,可能会想它不是方法吗?那应该我能点进去,这里边你点的话你会发现填不进去啊,因为当前这里这个一些数值类型,它的这个加加减乘除啊,这些算术运算符的这个方法是盖拉里边的所谓合成方法啊,合成方法这个其实在呃,Java里边也有类似的概念,就是它是编译器自动帮我们生成的,它可以绕开GVM的一些限制,所以这里边呢,我们并不能在本身它的SDK里边找到对应的这个底层的实现,所以这是编译器直接帮我们搞定的啊,这个大家就不需要再去呃较真想要看它底层的源码了啊,我们只要知道这是一个方法调用就可以了,当然了,就是既然SC里面有这样的一个语法规则,那大家自然想到了啊,在有些情况下,我可能是要把它写成这个展开的,这这种形式更方便对吧,那有些情况下大家可能更熟悉的是。
07:21
直接用方法调用的这种写法更加的一贯一点,比方说我写一个double类型7.5,想要把它转成转成string的时候,那大家知道我可以直接调它的to string方法,那这种写法呢,也可以整略这个点,然后用一个空格来表示,当然了,当前没有参数,没有参数,所以后面也不用再去加对应的这个参数了啊,所以大家看,如果我要是直接这样去写一个7.5string的话,它其实就相当于哦用了7.5的to string方法。啊,或者大家可能会想到我这里边可以直接呼也是可以的,对吧,哎,这样的话。
08:05
最终这里边输出的当然就应该是T了,就取的是它的这个整数部分,那这样的好处又是什么呢?呃,在后面我们讲到函数式编程啊,讲到函数的时候,大家就会发现这样的一个方法,调用,或者说函数的调用,如果说我们连续做调用的时候就有一个好处,我可以7.5to ink,然后后边再to string。来我们应该是点点点停的,像这个链式调用一样,把它传递下去,那现在我就可以直接空格,那大家看这是不是就有点像一个正常的一个英文的一句话一样啊,如果我们把这个方法名称定义的比较合理的话,我们就看到这不就是告诉我们7.5转换成int,再转换成string吗?哎,所以这样的方法在有时候使用的时候,你会发现它更符合人类自然语言的这种理解习惯啊,这就是关于skyla里边运算符的本质。
我来说两句