00:01
下面呢,我们继续来看一下样例类的一个最佳实践,那刚才我们讲了这个样例类哈,讲了这个样例类,那么我们来使用一下这个样例类完成一些功能,那么来体验样例类它的。一个价值或者说应用的场景,那首先呢,我们来看第一个题啊,第一个题特别简单,它是这样说,当我们有一个类型为amount的对象时,可以利用模式匹配来匹配它的类型。并将属性值绑定到变量。那这句话的作用是什么呢?即把样例类对象的属性值提取到某个变量,这个功能呢,非常的有用啊,后面会非常的有用,你比如说我现在这有一段代码,大家看一下很简单的一段代码,这里是一个for循环。这个for循环里面,我对谁进行一个for循环呢?我对一个数组,就是我这里有个数组,数组里面呢,有a Dollar的对象实力,有currency的对象实力,还有一个no amount对象实力,那我干什么呢?我用了一个匹配match。
01:16
哎,同学们可以看到我写了一个match过后,我这直接去匹配一个Dollar,注意这个地方根据刚才我们讲解对象匹配,它会触发。Dollar的on apply方法。但是这个方法呢,别人已经给你写了。别人已经可以,也就是说这个地方的好处是将来我们用量力类去进行对象匹配的时候,不需要我们再去手写这个on play方法,因为它会严格的按照你的这个机制给你返回,也就是说说的再简单一点,就是这个V,我们可以直接你这传进的是什么值,我就给你反着给你提取出来是什么值。啊,当然有同学说觉得,哎,这不是有这个值吗?为什么我要把它提取出来呢?再说一遍啊,你这里的构建的一个对象特别简单。
02:07
后面我们再有一个案例,你会发现那个对象就特别复杂,它是一个嵌套的,那这个时候我们用对象提取就会体现出很大的价值,那这地方你先体验它的用法,下面我就不用多说了,下面也是一个道理,就是说我这里有一个carry对象实例,我去进行一个对象匹配,然后呢,我可以反着把它的这两个,它的第一个数金额和它的单位提取出来,因为no amount没有参数,所以说呃,这帮如果是匹配no就就什么都匹配不到。好,这就是这个这个案例,我相信同学们一看一眼就能看明白啊,特别的简单,那现在呢,我们先把这个代码给他跑一下,看看它这个运行的是不是跟我们分析的一模一样。那还是老规矩,因为是样例,我就直接放在这个包包里面去,好,样例类DEMO02 OK。
03:01
好代码呢,是这样给大家设计的。这个地方我们直接拿来用,注意啊,Dollar currency no amount这几个样例呢,事先要定义好。那有些同学老师你这没有定义,为什么可以用呢?因为我在这个包包里面已经有了啊,为了呃,为了让他看的清晰,清晰一点呢,我还是把它粘贴拷贝过来,但是这样一一拷贝过来,它会重复定义,那怎么办呢?我们干脆把它都写个二啊,这样子呢,大家看的就比较清晰了啊,写个二。好,这边也是一样,给他来一个二,这边也是二啊。啊,不然的话,我同用一个在一个文件里面很难体现出它的特点,好同样道理,这边呢,我们一起写个二啊,写个二,这边写个二。好,然后这边我们这个也是调它的构造器啊,啊,这个对构造器好,写完了,那现在我们来看一下这个结果跟我们想的是不是一样的啊首先。当我们从这个数组里面取出这个DOLLAR2的实例时,它会按照这个case match匹配的这个机制一个一个去匹配,当它匹配到这的时候呢,他就会去调用我们DOLLAR2的这一个on a play方法,这个方法已经有了。
04:16
为什么有了呢?因为你是样利类,那如果没有那你肯定不行哈,那样利类他会干什么呢?他会把你的这一个对象传入他的那个on apply方法,并且帮把这个你的这个good,呃,这个参数给你提取到V,好,所以说这地方应该输出什么呢?这方应该输出一个Dollar。说出一个Dollar,然后1000。这个匹配成功了,那呃,这个匹配成功过后,下面就就不再走了,根据我们前讲的就退出CURRENCY2呢,一样的道理,退,因为这两个参数,我这也是两个参数,这样就会调用我们那个对应的方法,那这个时候就应该返回这个1000。1000块钱RMB。
05:02
OK,那么到了AMOUNT2的时候呢,因为也匹配了,但是这边是个空的,所以说这输出一个空。好,这个呢,我们就体验的价值啊,这个我们这个案例的价值是在什么地方呢?这该案例,该案例的作用,该案例的作用就是。就是体验体验这个样例类,样例类使用啊,就是体验使用样例类的方式,方式进行对象匹配的这个优越性,或者是简洁性。简洁性,因为你不用再去写了嘛,你不用下去写这个play方法了嘛,它自动提供了,而且人家确实可以给你提取出来,好,我们运行一下,同学们好,当我们运行了,我们看这个结果,好同学们看这个结果跟我们想的应该是一样的,看你的构造器是这个玩意儿,好返回把这个体积出来了,你的卡是这样子的,我把一一百和呃,1000和RMB提出来,Amount,因为没有参数,没什么提取。
06:03
好,这样大家可以做一个,呃,做做这个一个比较哈,看的应该很还很清楚的,OK好,现在呢,我们这个就OK,继续往下面来进行这个讲解啊,这个基本案例我们就说到这,然后呢,把它进行一个简单板书。刚才我们做了一个样例类的最佳实践,最佳实践案例。来一段代码。我们体验了它的,呃,样例类做对象匹配的一个优越性,对吧,这边就体现出他的,为什么刚才有一句话说样例类是为了优化对象匹配,或者。优化这个匹配而设计的一种内容是有道理的。好,我把它打印出来,好,我把它打印出来,来走一个。好,把这个呢,给同学们放到咱们的笔记中去。好,第一个案例我们就说完了,下面这个案例呢,各位同学,下面这个案例就。来继续体验什么呢?我们样例类刚才看到它本身提供了一个copy方法,在哪里?我们找一个Dollar,大家可以看到在这里面它有个copy方法。
07:12
那么这个copy方法可以用来实现一个什么样的效果呢?同学们看啊,样例类的copy方法可以带有名参数,这样copy就可以实现,呃,就可以创建一个与现有对象相同的新对象,也就是我们Java里面的克隆啊,类似于克隆这个效果。那么你比如说我这有个currency对象实例,那么我在这里用直接调用它的拷贝,直接我这样调用就创建了一个跟他一模一样的对象。而且属性值一样,那有些同学说老师你这地方没有没有传参数啊,注意如果你不传参数,默认就是你已经有的参数,我给他看一下案例。好,还是看这案例啊,我们不写在一起。Case class。
08:00
DEMO02,咱们写案例最忌讳的就是把它写在一个文件,写在一个文件呢,大家就看,容易看的很蒙圈,好老规矩把这个拿过来。哎,拿过来,那么根据我们一贯原则,就按照这个顺序来重新编一下就可以了,三啊,这边都改成三。这边也改成三。好,这边也改成一个三好,下面呢一样。好写完过后呢,我们来这个时候我就不用那个匹配了啊,我要讲的是拷贝,那这个时候怎么完成一个拷贝呢。好,比如说我这里有一个呃,Dollar的这么一个实例,就随随便写个啊,M TAT AMT等于六一个currency吧,有一个这个玩意。啊然后呢,我们六件的六了一个什么货币呢?比如说我这有这个3000块钱3000,大家不是算啊Dollar就是3000块钱3000,然后呢,是多什么什么钱呢?人民币叫做RM币,好同学们,嗯,现在呢,假如我想马上快速的创建一个跟它一模一样的对象啊,只是属性值一样啊啊属性值一样,那怎么做呢?非常简单,大家看amd.copy诶同学们可以看一下这里。
09:20
同学们,你你们看一下这个地方啊,我大家应该看到这大错了啊,嗯,这边你们可以看到它其实是有默认值的,这个默认值就是currentc3.z,就是你当前这个对象的这个value的值啊,再往下面看。那么如果这个单位呢,你看这个单位那就还不能动啊,我一动你们就看不到了,单位就是currency3.zunit的,也就说默认它就是你当即就是你这个AMT的那个单位和值作为值,如果你不给就是默认值啊,这样其实相当于就是进行了一个克隆。啊,类似于这个克隆操作。啊,类似于克隆啊,属性值一样。就说这个创建的创建。
10:03
啊,创建。创建的对象和AMT的属性一样,属性一样,非常的简单,那我给大家来做一个啊,比如说al al at2 T2,没问题吧,等于一个好,同学们我们把它打印出来看一下啊。走一个t amt2点它的这个value,我们输出一下加。同学们知道啊,此时此刻这个VALUE6本质它在底层是一个只读的属性,因此你是可以直接来调的,直接写是可以的,但是你不能赋值哈,不能赋值,同样单位也给大家打印出来一下点啊AMT。AMT。AMT2MT2.2它的什么呢?它的这个单位unit好我们输出一下看对不对啊,MT2.1010等于,那应该是3000人民币,执行一下。
11:09
3000人民币执行项,你看这个就执行好了。这就执行好了,那么我们来看看直接输出一个对象能看到什么效果啊,走,我们直接输出。啊,我们直接输出。我们直接输出过后呢,你看他直接把这个对象打出来,为什么?因为他重写了图斯顺方法。啊,他把你的图示顿方法给你写了,你可以你可以去看一下,它底层是有个图斯顺的。啊,他把这个图论给重新写了一遍。托斯镇在哪里呢?啊,应该是在。诶是在这边是吧,最最屁股后边。在这看到没有,其实它就是调用这里面,调用这里面的这这个方法就是说图斯把你的这个对象实力给你值给你打出来了啊,底层是给你打出来的,所以说你那看出来这有个3000RMB看到了,好除了这种方式呢,它还更加灵活,什么灵活呢?就说如果说你在进行对象克隆的时候,你觉得你想改变哪个值,比如说3000块钱,我想改一下单位,我不动。
12:10
啊,单位不动,或者是这个金额不动,单位动也可以,那怎么办呢?他也提供了,我们以前讲过叫做有可以指定这个参数名啊,那这样子呢,就更加灵活,MT2T3等于还MTMT点还是拷贝,拷贝的时候呢,我们可以通过指定值来玩,比如说value。啊,这个value,这个VALUE6呢,我们现在比如说改成8000。其他不动可以的,当然也可以改单位啊,这样子呢,你生成的这个对象啊,我们直接输出了你生成的这个单位呢,就是变成8000块钱人民币了,也比较快捷。大家看效果很简单,就是8000块钱人民币,正确好,其他我就不再多说了啊,其他就是呃,刚才拷贝还可以改单问我就不一个讲了,这个也可以改单问你你你指定这个参数就行了,比如说我要改一个,呃,改成英镑。
13:04
AMT。点拷贝直接改的是UN。好,然后呢,改成英镑。啊,或者美元美元。比如说我们改成这个美元,那这个时候呢,我们来接收一下VR,哎,就写错了。点VAR,好,这就是好,比如说我们写成MT是MT。AMT4好,这个我就呃说一下就行了,好,那关于我们第关于我们样例类的第二个最佳时间呢,我们也给大家讲完了啊,非常的简单,好先把它写到这里,最佳实践第二个案例。好,写到这来。来板述一下第二个案例,标题三对不对?好,那么我做了一些说明,把案例给大家放过来,这是说明。啊,对我们这个样,呃,案例的说明,然后呢是代码实现。
14:01
Or代码实现?给大家来一个小的箭头,好把这一段代码呢拿过来为我所用就OK了。好,那么关于样例类的最佳时间呢,还有一个案例,但是现在我还不能讲好,后面还有一个关于样例类的最佳时间在哪里呢?在这在这个样力的最佳实间,还可以跟这个匹配签到结构结合使用。啊,那这个功能就还会再进一步,那么在讲这个,呃,第三个最佳时间之前呢,我们还要有些工作要做,做完了过后再去讲它的更好的一个应用实例,先讲一个什么呢?讲一个case语句的中字表达式,这个呢是一个概念,大家知道就行了啊你比如说什么是中式表达式呢?比如说一加二,这个就是一个中置表达式。如果on apply方法产就是这个对象提取出方法产生的是一个圆组,你可以在case语中使用中字表示法。
15:03
比如匹配一个历史的序列,大家看我这里有一段代码啊,呃,这是一个历史的集合,Match什么呢?我现在要用中字表达式来匹配,比如说first second。那这样子会干什么呢?他就会按照这个顺序。按这个顺序怎么匹配啊,First匹配第一个。啊,Second匹配第二个rest呢,匹配剩余部分,这样返回的这个东西呢,大家可以看到,待会儿呢,就是一个圆柱啊,这是个圆柱,我们来执行一下就可以了。这是中置的一个表达式使用,那还是跟这块有关系,对不对啊,中置表达式我看这个写到哪里比较合理啊。呃,就单独写到这边吧。走一个吧,啊叫mid mid匹配就这样写。来做一个object。
16:00
然后我把这个代码给它运行一下,大家看一下就可以了,很简单啊,那么我们直接运行,我们直接运行看这个结果是什么。好,这个第一次呢,First和second匹配到,所以说这打印的是一,这个second呢,打于的是三,后面这个rest next呢就是代表,呃,我后面这个把它都给这两个都给rest,注意名字随意啊,就你不是说非得叫rest,也可以改别的名字,我直接运行就可以了。注意看它匹配的方式,当我运行完毕过后呢,我发现,哦,对不起啊,这个地方我是全部加起来,这个就看起来比不太好看了,好我隔一下加个字符串,诶加个字符串这样呢,大家就看到有这么一个区别,对吧,我再执行一下来,同学们,这时候你们再看应该就是132啊对了。132对的,那这样子呢,这个rest我们也可以输出对吧?Rest我们直接输出一个rest,看是什么样子的,来直接把这个rest的输出,因为我这没有输瑞,你看一下瑞的,我也自己输出一下。
17:06
啊,直接输出一下,我们看这个结果,瑞的呢,直接就是拆解出来的,这后面这一部分啊,拆解出来这一部分,那说明还是匹配的,是一个历史的啊,不是刚才说的原著还是个历史的啊,还是个历史的好,那么关于这一块的这个匹配呢,我们就先说到这啊,前面其实应该好像也提过这个,我就不做笔记了啊下一个。还是要把笔记补一下。啊,快速的过一下。刚才讲了一个case中的中置啊,中置表达式的一个使用。聊天。那这边我们讲了这么一个小案例,对不对,这个案例比较小啊,大家一看就知道是怎么回事。好,基本介绍说了一下。啊,疾病介绍术了,应用实例我们也讲了一个。那么案例呢?我给大家拿过来。诶,拿过来就行。
18:01
好,给它放到这叫中质表达式。先去段视频。好,这边讲的是什么呢?Case语句中中字表达式的使用。好,截取一段视频。
我来说两句