00:00
下面给大家讲解一下开的一个精华部分,就是这块还是感觉很有很有特色啊,很有特色,学过很多语言,我觉得这个影视转换和影视参数,包括他的影视类还是特别有特色的啊,能够感受到这个设计者还是真的是很很用心在设计这个语言哈,我们来看看这个影视转换是干什么的,来打开我们这个章节,那首先呢,我们来建一个新的章节,取个名字,对这块呢,我们专门讲以式相关的内容。好,那么这块我们讲什么呢?叫影视转换,哎,影视。影视转换和影视值啊,影视值。二影视之。好,我们专门讲这个影视相关的内容,给大家一个标题,一。不要标题啊,那么还是老规矩啊,我们先把这个,先把这个关掉,先把这个关掉。
01:00
好,还是老规矩,我们先呢看一个问题对吧,由一个问题引出我们的需求嘛,这样大家学习起来也比较轻松,先看这段代码啊,各位朋友,这段代码呢,大家一看应该是错的,对不对?我把3.5交给一个int,肯定错了,原因不用解释,因为你把一个double交给int,那么出现了一个高精度向低精度,这肯定就错啊,这个我我不多说了,那么从这里呢,我们就引引出了影视转换的一个需求,那么我们在开发中有没有这种?把一个double给特这种需求了,必须是有的,对吧?那有的话当然很简单了,你要解决这个问题very easy嘛,说老师,呃,我接一个to in inter不就完事了吗?你啰嗦什么是吧?是我们可以这样写,但是当我们一个文件里面有大量这种东西,你都写个这个是不是麻烦了?这么麻烦肯定麻烦嘛,假如说我这个参数要传,我要这么转换这个这个这个给值,我要这么转换显然很麻烦。于是乎,当我们这种情况比较多的时候呢,我们这个设计者他就想一个办法,怎么呢,咱们自己能不能实现这种自动的转换,而且这种自动转换呢,并不是我们低精度向高精度,而是我们指定的一种隐私转换,诶需求就出来了,什么意思呢?就是就是能否就是指定。
02:21
指定啊,指定某某个数据类型啊,某某些数据类型的相互转换。相互转换,注意听这地方啊转换。那么我我这说的是指定,也就是说你可以根据这些需求来定制,那这个就很有很有用了,很有用好这个问题咱就提出来了,那下面呢,我们就来看一个快速案入门案例,首先呢,我们看一个影视函数,听这个名字就知道隐视函数,注意啊,这个隐视函数不是指的这个函数是隐私的,而是指的它的功能是隐私的,不是这个函数藏起来了,它怎么呢?
03:06
影视转换函啊,影视转换函数是以implicit啊,Implicit一个关键字来声明的带有单个参数的函数,怎么个意思?第一个关键字是implicit,第二个怎么样?单个参数你整多了就不行。是不是这意思啊,哎,等等多,那么这种函数呢,将会自动的应用,将只从一种类型转成另外一种类型,至于这个类型是什么,你来指定。好,这个是它的基本介绍,那二话不说,我们赶紧来做一个快速入门案例,我们用一种影视函数可以以优雅的对吧,很优雅对吧?很优雅就说诶,不知不觉就把这事干了,也不知道为什么对吧,结果好像你中了500万,你不知道为什么中了500万,诶这个很有意思,很优雅,但是心里面很没底是吧?好意思好优雅的方式解决数据,那么我们快速的来写论代码。
04:03
好,我们新建一个章节叫CHAPTER09对不对啊,OK chapter。零九。那么我新建一个对不对,文件叫。啊,这个就隐私的意思,Implicit demo01 demo0一来一个object,好新建一段代码。好,各位朋友,那现在呢,我来先写一段刚才代码,比如说我有一个number,我这个number的类型,对number的类型,我们是一个类型,然后给他一个3.5。啊当当然同学们可以看到代码肯定是错的对吧,因为你你这个错的,那怎么办呢?来写一个隐式函数,编写一个隐式啊隐式函数完成,注意听啊完成什么呢?Double到in特的转换,你看我专门写清楚了,就是这个类型呢,你要指定啊,就是你不是它不是万能的,就是它是double到int,那你如果到int你还得重新写一个啊转换。
05:15
好,代码呢,我们来写一下啊,转换,那我就开始写了,Implicit,这是一个关键字,不能少D函数一函数名随便写。你要写F1F2是你的事儿,然后呢,我们写个DWOK,那么此时此刻我们返回了一个int。这句话的意思啊,同学们看一下,那这边怎么写呢?d.to in,完事。哎,你看这代码马上就跑了,而且同学们可以看到,当这段段呢,跑结构,我们这一段会出现一个。下划线实体的同学们,以后只要在idea里面看到有这种下划线,就说明它一定用了隐藏隐视转换,那么对于我们阅读Spark的源代码会有很有帮助,有些时候你看不到,诶,因为这个代代码我是写到这的,但有可能将来这个input是直接你要port进来的,你看不到。
06:11
但是你只要看到一个下划线,就知道它的确运用影视转换啊,运用影视转换好,我们现在呢,来运行一下,看看代码能否成功,那这样就很多了,你随便写,比如一个NUMBER2INT。等于6.7,也也就是说我以后不需要每个地方写into的,呃,To就这样写就完了。好,我就举一个例子,同学们,那么现在呢,我们print,我们打印这个number,等于加这个number,来各位同学运行一下。好的,那我们一运行过,看到代码呢,没有任何问题便删了。好,同学们看这个代码。啊,当我第一次第一次我们来研究这个问题的时候呢,肯定大家会觉得很神奇,诶怎么回事,他就。他就写个三天,你写一个函数,怎么他就能用呢?看起来感觉好像很虚无缥缈,其实是这样子的,我们编译器做了很多的工作,其实编译器干了什么事情呢?首先我跟大家第一第一件事情啊,同学们,你们想一想,我问大家第一个问题,现在我在main里面写了一个F1,是不是以前我们讲过,相当于是。
07:22
相当于将来这个F1,我问大家F1将来会生成一个什么样的函数名,还记得吗?是不是F11还记得吧,哎,那么这个地方将来在底层。它会生成。生成一个函数什么呢?F1DOLLAR,如果同学们还记得话,我应该讲过这个东西。那么这个它会生成这个东西,那么在编译器底层这个3.5就直接就你们看到这段代码会直接编译成。底层它会,它会直接编译成这样,编译成这样的东西,编译成什么东西呢?就是直接给大家看一下啊,我就直接写,它是这样写的,把F1放进去了看清楚。
08:09
然后把你的3.5穿进去。其实就做了这个工作,你把3.5还进去,不是相当于把它返回来了吗?那我们看一下是不是跟老师分析的一致,好,既然我说了这个东西,大家应该有一个感受,就是其实并不是空穴来风。只是人家帮你编辑说你别干了,我帮你干。对吧,你这样写,你这样写就行了,我知道你想干啥,然后呢,我把你这个给你转一下,而且大家应该知道,将来你写的这个隐私函数不能乱写,你一定要在这个作用域里面。就你既然要用到你的编译器,如果找都找不到它,那那那肯定玩不了了,所以这个地方呢,影视函数其实要跟你的这个作用率有关系的,这个我们应该敏锐的感觉到,就是你学学程序的吗,应该能感受到这个东西,说隐式函数有个作用域的问题。影视函数应当应当在哪里呢?哎,应当在这个作用域才能生效,对不对,作用域才能生效没问题,那现在呢,我们我们二话不说,我们看一下源代码,打开我们的这一个,呃,反编译工具,打开刚才我们的这一个CHAPTER09。
09:23
好,进到这里面,我们直接看核心。好,我们直接看这一段代码吧,进去好点,到这里面去,好,同学们一看,完全的OK,请看你的这段代码被搞成这个玩意了。这就是你的所谓的隐私函数,然后呢,在它底层里边,其实它还是用的Java的底层是不是,哎没毛病,然后呢,你看你这干了些什么事。哦,F1DOLLAR1把3.5直接进去,这个我相信同学们一下就看懂了,哦,原来是这么干了一票哦了。其实这个就很好理解了,好同学们,那关于我们第一个快速入门就说到这里,那么我们先简单的板述一下,我们再说细节,好吧,好影视转换诶,我们讲了什么东西呢?我们首先。
10:10
把这个影视转换的,哎,对,把这个标题二标出来,我们首先给大家说了一下影视转换的一个问题的提出,啊,就是这段代码,诶怎么办,对吧,怎么办的,问一个问题,好,我们先提出了一个问题,引起大家思考,同而同时呢,也引出了我们,呃,这个隐私转换的一种必要性。对吧,你如果没有隐私转换的话,你每个地方都要去to string to to很麻烦嘛,很麻烦,而且这种需求肯定大量的存在。好的,诶,我们就写到这儿,然后呢,有了它过后呢,我们就来了一个快速入门案例,并简单分析了一下它的底层,好把这个东西给同学们拿过来。诶,那么我们这做了一个隐式函数的基本介绍,诶说隐函数是什么呢?简单的很,然后呢,隐式函数的快速入门。
11:07
啊,快速入门呢,我直接把代码给他拿过来。啊,这段是我们的代码啊,代码演示。A,代码演示代码代码演示好,那具体代码呢,我就直接放过来啊放过来。给大家板书到这边来。哎,往这儿一扔。好了,然后呢,我们把这个地方也说了,底层对应的什么,我们把这个对应的反编译的文件也给大家简单切过来一下啊,反编译后的反编译。反编译后的这个代码啊,这个呢,我们就给大家列到这里来。啊,哪里呢,其实就是这么一点啊,核心的东西就这么一点。OK,那这个地方同学们看到的,诶,这个就是我们那个所谓的隐私函数变这个了,对吧,它其实呃只那个影视函数,大家知道那个implicit其实就是给编译器看的。
12:01
现在大家理解更透了,其实那个关键字主要是给编译器看的,底层呢,人家还是这个函数,然后呢,这边他做了一个包裹啊,直接给你封装起来两点。好,同学们,那这个快速入门案例我们就讲完了,截取一段视频。
我来说两句