00:00
那讲到这呢,一定有同学问一个问题,就是说说老师,那假如现在我们有要匹配某个范围怎么办呢?你们在Switch里面呢,同学们看到咱们Switch一般是匹配几个具体的值。也可以匹配范围,那匹配范围一般是把这个范围先做一个,做一个运算,然后来判断它是不是在这个范围里面,对吧?在Switch在match里面呢,它显得更加简洁,它直接可以用这种if的方式把这个范围的匹配也写在一起了,也就是说你可以这样理解开的,这个match呢,既可以对一个点的匹配。具具体的一个值的匹配,也可以对一个范围的匹配,因为它这里面可以增加首条件首位,那我就直接举例子了,你看这里我有一段代码。这个代码呢,非常简单啊,说我对这一个字符串进行遍历。
01:01
如果匹配到是加号我怎么怎么样,匹配到减号我怎么怎么样,哎,有一个问题了,假如我们匹配到的是一个范围,那那我这没有写范围啊,我写的是如果是三,当然你要是比较机灵的同学呢,肯定想到,哎,既然一幅一句都有了,那当然我可以写这种,比如说这个这个你匹配到这个值CH大于呃或者小于,肯定这儿可以写这种。范围了,所以说它这个里面可以把我们的范围匹配和点的匹配融在一起,显得功能更加强大。那么现在呢?我们把这个首位案例给同学们。运行一下代码很简单,我就不写了啊,这个代码我相信每一个同学都能看懂,没有什么,几乎没有什么难度。那现在呢,我直接给大家写一下这个match的一个首位案例,好,Match怎么写呢?叫match if DEMO。我们尽量把时间放在哪里呢?就是对这个呃,语言的一个理解上,语法这些呢,大家看到的代码没有,没有谁写不出来,我先说一下啊,这里是对什么呢?对这个字符串进行一个遍历加减三。
02:17
单号的便利。用这个for来遍历的,下面我写了一段代码。我写了给他定一个sign和digit,然后呢,CH频繁的进行一个匹配。那如果他是加怎么怎么样减怎么样,这里我加了这个范围,那我这为了证明这个可以使用范围呢,我再加一个啊。我再加一个来CH下划线。如果CH大于。啊,比如大于十,那么这个地方我们可以输出一句话,比如说输出什么呢?就是说CH大于十被匹配了。啊,大家不着急,这边还有好多要说的呢,它将来这个地方还可以返回整个这个match,还可以返回一个值,就match它是一个表达式,所以说这里面这个值呢,可以你在这个后面返回什么,它还可以以这个值的方式来接收,我先把这个讲完,我们再说这个match返回值的事。
03:13
将来同学们都能看到好,同学们现在根据刚才老师写的代码呢,我们来看一看它应该输入什么来,我们先分析,我们先不运行啊,我们来看看他应该输出什么来,一个个走,首先它先匹配到。加这个符号跟谁匹配了呢?跟它匹配了,所以说这个时候CH它应该是加它匹配到这个上,S就等于一,这边就输出一个一,那么digit是什么呢?没有做任何改变,因此它仍然是零,好,第一个就输出来了。第二个它匹配到减对不对,减的话呢,匹配到它,它把这个善重新复制。重新复制过后,你看这个地方,它是做一个整体的这个for循环,大家看我把光标定到这这边就对应的括号,就看到这个是包在负循环里面的,所以说你如果是减,那么这边首先这是个减。
04:13
Sin是多少呢?被修改成了负一,所以它输出负一。对的,然后呢,这个第没有变,仍然是零,又写完了,好,我们再看第三一个符号是三三被电离出来过后呢,这个类型,首先我问大家一个问题,这个字符串遍历过后,这个CH是什么类型,同学们。是char呢还是字符串呢?这一点大家要很清晰知道啊,是什么?搜一下是个char,这点要答上来哦,我们对字符串的一个便利,它取出来的内容其实是一个差。好,那既然是个叉,我这里把一个char转成字符串equal,这两前面两个肯定是。对应不上三不等于加,也不等于减,它匹配到这个了,匹配到这个低级的变成三了,于是这个地方应该是三。
05:08
000。还有个三。啊,因为你把它改成三了,这就完了,最后这个叹号,叹号它既不匹配它,也不匹配它。这个地方很关键。说老师。这个地方这个。表示什么意思呢?你刚开不是讲了这个下划线表示一个匹配不到的时候就执行吗?现在问题来了,嘿,我刚才虽然讲了这个是匹配不到就是应他,但是我并没说后面有这个首位,那这个时候当你是叹号的时候,他到底匹配这句话呢,还是匹配这句话呢?还是匹配这句话呢?大家应该感受得到。应该是匹配到了最后这个。OK,那这个时候这个这个下划线,它的含义并不是默认匹配,而是什么呢?其实它是。
06:05
表示忽略。忽略得到的这个词就是它表示我不去接受你这个CH。那么我这里先看一下啊,如果是叹号,应该是叹号,然后三会匹配到这个,而不是上面这个值,那么就等于二。那第几呢?等于零,因为你遍历时候这个重新被制成了零,好,我们来看看这个结果跟我们分析的到底一不一样啊,同学们看代码的执行走一段。好哦,这个地方我还是有问题啊。我们看这个地方跟我想的不太一样,这有一个这个符号,嗯,S呢,它并没有执行到这句话。那我看看它执行到哪个地方去了啊,刚才我们分析是有一些问题的。他应该到哪儿去了呢?
07:02
它应该执行到这个了,为什么这个呢?因为你这个叹号其实它是大于十的,对吧,因为这个条件它满足,那我把这个条件再整大一点。看看这个就对不对了,真成1110,我看看你这个时候就说匹配不匹配上肯定要执行,匹配不到的话,那肯定就好,我们再跑一下。好,我们看看这次跟我们分析的,哎,这次就对了,所以说仍然证明这个下划线并不是代表默认匹配,好,我今天做一个特别重要的说明啊。注意听,如果,如果case后有什么呢?这个首位条件首位及IF1卷。那么这时的这时。这时的这个下划线不是表示不是表示默认匹配,而是表示什么呢?如果面试官或者说我们要一定说清楚的话,这个地方下划线它其实表示的是忽略,忽略你这一个。
08:09
呃,就是你给我这个值,我不要,我我不接收,那就意味着将来如果我这写了一个值,它其实会默认把这个CH给到这个V。只是我现在呢,不要。不要这个词。所以说这个地方表示什么呢?它表示的是。表示忽略。忽略传入的,哎,传入的传入的什么呢。啊,忽略这个词,不要我不要你。啊,忽略,但是呢,匹配该怎么匹配还怎么匹配,你看我这匹配还怎么匹配啊,所以这个结果呢,说出就应该是这样子的,刚才我这个叹号我没有考虑到,它确实是大于十的,所以说刚才分析呢,整体没有错,但是细节出了一点问题,出了一点问题,好同学们,那这个案例呢,就充分的体现出它的一种好处了,就是什么呢?从这个地方我们可以看出来,在是开里面的这个呢,它其实是把if和这个。
09:11
就说对某几个值的判断和范围的判断融合在一起了。这一点确实是非常好的。就是以后呢,咱们就不用再去,诶比较说有些我们再去Java的时候,老师,所有的老师都会给你们说这个题,请你们分析一下,是用Switch效率高呢,还是用if else效率高呢?其实在底层都大同小异啊,不会说哪个速度更快一点,如果说哪个速度更快一点,那if else肯定就没有存在的必要了,底层代码从反馈边来看呢,这个它都是一个jump。跳转的一个动作好,所以说你看这样他就把它合在一起了啊,合在一起就相当于把if else这个功能也融入到match里面去了,非常的不错啊,你因为我可以这样子,当然我可以加条件,我可以加这个条件,并且。
10:00
小鱼。要小于20,然后呢,这个地方我可以加一个小括号。啊,这边看加小括号也是一样的,没没有问题,好的,那同学们呢,就是我再运行一下啊,看语法有没有毛病。哎,语法有没有毛病,你看OOK的OOK的好的同学们了解这个,呃,一个大于一个B撇还要哎大于这个,那是还要小于这个啊,所这个大于是永远进不去啊,要永远进不去啊,那那写个或者呢。啊或者关系,这有有有可能进去了是吧?哎,有可能进去了,现在能进去吗?也进不去。呃,那我写什么能进得去啊,同学们。在这这个大于这么多是满满足不了小于。小于一一百二,是不是就就满足这个条件了。感叹号大到大概是多少啊,33这个应该就满足了,好,我们再来执行一下,看看这个计划有没有执行到呢?
11:03
哎,是不是执行到了呀,是执行到了,说明这个地方确实是可以写条件的,好了,同学们,那关于我们这一个首位呢,老师就给同学们先介绍到这里,好,介绍完了后,我们来做几个题,请同学们来做这两个题,请大家静静的观察一分钟,待会我请同学说一下结果是什么。好,请思考。首先呢,我们来看看第一个题。那第一个题呢,呃,遍历呢,仍然是对这个字符串进行一个遍历的啊,代码大体相同,我们来一个一个的走。好,首先。我们看第一个是加。那么家呢?它会先匹配到S上,这个没没毛病,首先我们看这个语法能不能过啊,就是说你有两个默认他在我们的卡里面,他接不接受这种写法。好,我们可以先把这个代码先拿过来,就是语法上能不能过好,我现在呢,直接先把这段代码拿到这边来,我们先看语法,好,我这几个叫match的exer cx exercise 0E。
12:12
好,同学们,我把这段代码先拿过来好,好从语法这个层面上,它没有报错,好,没有报错就好,那么接着往下看,第一个来了一个加号匹配到它,所以sin呢就变成了先是加号,Sin呢就变成变成一进去了,而且执行完毕就退了,退完之后低级呢仍然等于零,好,第一个就这样子的。第二一个呢,我们来看看减减跟它匹配也很好理解,那么就是减减这个sin呢,搞成一个负一好变负一,负一完了,这个低级呢,没有变化,是零好,关键是下面这个,下面这个三跟这个没匹配到,跟它也没有匹配到,显然它会匹配到这个。是吧,虽然你这有两个问,但是我匹配到一个呢,我就不再匹配了,所以这个时候呢,我们这个加。
13:03
变成它,然后这个dig呢变成三,这个S没有变,所以说是零啊,这边是零,然后这边第是三也OK,第四一个。注意啊,它这个做完了之后,默认仍然是会退出,不会再去匹配第二个case,好这个时候呢,有一个叹号,叹号呢,好的叹号它都没匹配到跟前面应该是一样的啊,就是零三好同学们我们运行一下,看我们分析的道理对不对,还是说有什么问题没有。好,我们看,我们可以看到跟我们分析的呢,是完全一样的,没有任何问题,这说明在match里面呢,它可以同时写多个,其实大家看到这个语法其实其实特别的不应该这样出现,理论上说应该报错才对。为什么应该报错在这呢?因为这句话其实没有机会得到自行的是不是没有,但是你说是开了,你说语言嘛,所以说人做的有时候就其实有的很怪,其实严格的讲,这个是一个语法编译器上的一个,我认为是一个缺陷吧,因为这个相当是永远无法执行的。
14:13
你这个走了,他不会执行它呀。那意义在什么地方呢?反正我没想出来啊,我确实一时半会用,你们觉得这个地方写出来有什么用啊,好像看不出来有什么用处。对吧?编试问你说这个能不能过是吧,说能过好说明你用过啊,在很多编译语言里面,当有一句话永远达不到的时候,他直接告诉你这句话不能写啊,Java里面就有这种这种特性,你就比如说if,然后有一句话永远执行不了,他就会告诉你这句话没有意义,他语法过不了,说这个地方呢,估我估计啊是他,但一时半会想不太明白,不也是啊,就按理说永远执行不到。你不管怎么写他他都是行不到,因为。他这个你就直接给他掐了啊,不管怎么样,这个语法它就是就是可以的啊,你不要说说,反正这个语言也不是你你设计的,所以说你只能用它了,那么我们来看第二一个练习,第二个练习呢,跟前面一个最大区别,我把这个默认直接提到前面去了,同学们在学Switch的时候,呃,老师有没有讲过,直接把默认提到最前面。
15:17
那么如果能够匹配到,他会走匹配那那段代码吗。诶,可能同学们都已经忘了,好,那么我们把这个呢,给同学们来写一下,好这些就是有可能他会出以什么方式出现呢?就是以那种面试题啊,或者一个测试题出现,好,我们来写一个吧,Match。Match exer c02,这是我们第二个小练习,来吧,同学们。那这段代码呢,我们看语法上首先没有任何问题。现在的问题就是。就是说。如果这个默认这直接就给你挡的就成功的话,那下面代码全部都没机会执行。
16:01
因为这来了个默认,全部都能匹配上吗?好,我们来先来执行一下,看这个运行的结果啊,看他的,看看我们SKY设计者,他是怎怎怎么处理的啊,我们现在是学别人的语言,所以说只能是听人家的看法。好,我们发现全部匹配到这了啊,相当于你是下面写的全全没有用。啊,因为他他就这么干,干这个事儿的。所以这就把我们这个代码严谨性就交给谁去写了,交给程序员去处理了,所以你只要在前面写一个默认,那他就直接相当于这个这个什么呢?相这个就说我谁都能匹配。我说的谁都能匹配,注意啊,如果你后面加了这个if条件又变化了。你加了if条件,这个下划线的含义就发生变化了,就不再是默认匹配,而是忽略这个值,你看我写成这样一个东西啊,同学们,CH大于。大于这个写大一点OK,而且大家有没有发现这写大于的话,我们小框不写,那这个时候写个大于,我们看看它还会这样去走吗?这个时候它这个一辅语句就会发挥作用,它这个下划线就不再表示默认,而是代表一个忽略你传进的CH这个值,就是我不把这个值放到这。
17:16
待会儿我马上会讲这个东西啊。好,同学们,那么现在呢,我再执行一下,同学们请看效果。啊,这个时候呢,我们可以看到这有抛了一个异常。哪儿跑了一场?大家看这里是不是又意味着你又犯了一个错误,就是因为加和减匹配上,但是三和啊没有匹配,你也没有K,是不是就报错了,但是至少证明了这个点的含义的确是。不是表示默认匹配了对吧?好,如果说这样写的话呢,我们就应该在这里再加一个默认匹配这个代码就OK了。Case这样子就是默认匹配好,我们写完这个东西呢,我们直接写一句话。对吧,写上一句话就说没有任何匹配。
18:00
没有任何匹配好,注意它的这个语法现象,所以它语法现就是搞清楚这两者的区别,这就是我讲这个题的一个作用。好,这次呢,不会再抛异常直接,没有什么匹配完事,好,同学们注意下这个细节,好,关于这两个题的评讲呢,我们就先聊到这个地方,说说了一下这个,呃,下划线和后面带判断它的区别是什么?大家注意一下它的语法特点。好了,同学们,我们现在把这个思考题呢给同学们整一下啊,刚才讲了一个首位。啊,首位首位呢,让我们脉曲啊,就把这个呃,匹配单个值和匹配范围呢融合在一起了。好各位,我把它写到这里,那所谓我讲什么东西了呢?诶,我讲了一个基本的介绍。好的,讲了一个基本介绍,OK。讲了一个基本介绍呢,我又讲了一个应用案例,就是快速入门案例,这个案例呢非常简单,就是我这写的这第一个案例,就他。
19:05
啊,就这个家伙。卖的栏。这里面是我们的第一个案例,对不对?好,给他拿过来。给他拿过来,这是我们的第一个案例。这第一个案例讲完以后呢,这。诶,这个不是这吧,好像哦,这个不是这个题,这是呃,截错了,应该是截的这个地方,因为这边讲的是。首位好,我重新粘一下啊,同学们,这是关于首位的一个应用案例,讲完这个过后呢,我们做了两个课堂练习题,课堂练习题。好,那么这个课堂练习题呢,我出了两个题,引起大家对这个它的一个语法现象的一个思考,思考讲了哪两个题呢?好,第一个。第一个题是他啊,是他在这里,我们把这个结果说出来了,这说明什么呢?说明在这个地方啊,可以有多个默认匹配,但是最后一个不生效了。
20:04
啊,可以有多个这个默认匹配,默认匹配A默认默认匹配,但是但是后面的默认匹配无效,后面的默认匹配。匹配无效也不报错啊无效,那么我们的编译器呢,也没有报错,编译器没有报错。好的,这是第一个题。我们就说到这儿了。好,第一个题说完了以后呢,我们又给他讲了第二一个案例,第二个案例呢,我们是这样给大家设计的,是这样子,我有多个的话呢,对吧,这个从这里证明这个下划线的确代表。忽略这个CH好,OK,大家看一下这个题就可以了。好,这是我们的第二一个题。好,同学们,关于首位,我们就先聊到这里。
我来说两句