00:00
下面我们来看一下go浪里面Switch分支结构的细节讨论。分支,所以细节呢,我给同学们总结了大概有十点,那么我们分别来进行讨论,好不好,我们来看一下。呃,我们先看Switch细节讨论的前六个,前六个我们来看第一个case,后边是一个表达式。就是case后边是个表达式,即可以是常量变量,一个有返回值的函数都可以。也就是说这个表达式呢,大家不要认为只能写一个常量,其实它也可以是个变量,也可以,甚至是一个有返回,有返回值的函数都可以,甚至还可以运算。能理解意思吧,所以他这个表达式呢,只要是返回一个值就可以,这一点大家要非常的明确,不要简简单单理解说,诶老师你刚才讲的,刚才讲的这个case。哎,这个地方是不是一定要写成一个句,必须写成一个常量子,或者是一个字面量子,不是这样子的。
01:04
它只要是一个表达式就可以,那么这一点呢,我给同学们来做一个案例。那刚才呢,我们写完代码以后呢,我们没有怎么样啊,我们没有把代码付过来,所以说呢,我们把代码先放到笔记里面来。刚才这段代码呢,我们粘贴复制一下。来吧,各位朋友。放这里。好的放到这里,下面呢,我们来把这个细节给大家过一下。好,我们来讨论一下,讨论一下Switch。Switch的细节,使用的注意事项,注意事项和细节。给他一个标题三,对不对,那么我们总结了有十点,我们一个说我们先拿出前六个点。对吧,来先拿出前六个点。
02:00
整理一下我们的排版书。第一个点。一个个说啊,我们先说第一个点。那第一个点是什么意思呢?就是同学们要注意,Case后边是一个表达式。即可以是常量没有问题,也可以是一个变量也没有问题,那么甚至呢,我们还可以是一个有返回值的函数。甚至还可以运算啊,甚至还可以运算,那我给大家举个例子,打开这里我们来举例说明。打个比方,同学们看。嗯,同学们看啊,这个地方,当然这个地方也是一样的了,上面这个也是一样,我举个例子吧,我就在这举例也行,我就在这个K这举例就行了,大家看这个地方我们是一个变量是吧,目前是个变量。我也可以写成一个常量,大家看。我可以直接写个长篇在这儿。写个A一样可以,那这样子的话,就意味着我这个case就固定这个地方表达式的值就是A,那这个时候它永远就匹配周一猴子穿新衣。
03:08
从语法上它是支持的,看到没有,所以说你看我给大家让一下。我给大家让一下,你看我随便输一个什么,比如说我输一个G,其实这个时候呢,因为你输完了之后,没有拿这个G进行匹配,而是直接写了一个A,所以说他就应该直接输出什么呀,猴子穿新衣。是不是说这个语法是可以的,看到没有,直接写个常量在这儿也行。这是第一个案例,可以写,甚至呢是一个有返回值的函数都可以,那么同学们还没有学函数,所以说简单的体验一下就可以了。比如说我写一个。写一个非常简单的函数啊,非常简单函数我就返回一个值,大家看一下我返回什么值呢?比如说这里我写个test。对吧,我写个test,写个test呢,我返回一个非常简单的一个字,就是返回一个bit吧,好不好返回一个bit。
04:07
那返回一个bit呢,我返回个什么呢?比如说你给我输一个bit,我加一个1BBY。大家看我这什么意思啊,我要这么写。加一这句话的意思就是说,你给我传了一个,传了一个B进来,B变量进来,我加完一个一过后返回去,能理解吗?没问题吧,很简单啊,那这个时候呢,同学们看啊,我可以,我甚至可以这样写来。刚才这个写法我撤掉了,我直接写test。传一个变量进去。K,诶,你看这样写都可以。他说老师怎么回事呢?刚才我反复讲过啊,这地方只要是一个表达式就可以,既然是表达式,只要有值就行。那同学们想一想。如果我输了一个A。同学们动脑筋。我输一个A的话,这个地方会调用这一个函数,那么这个时候你输一个AA进去,那这个值对吧,大家如果说大家这看不懂的话,我写成char。
05:10
大家看的更清楚一点,比如我传了一个字母A进去。这个K传到这里面去了,对不对。那么他把这个只加了一个一返回来,那就说你原先B加一,B加一的话,当做整数来运算,就应该等于B了,能理解吗?那就是说如果我输入A,其实它会返回这个周二猴子当小二,为什么呢?因为这个只是在原先输入的这一个字母基础上加了一个一,那加了一个一,就是你的字母就往上走一个吗?是不是这样的道理呢?来我们跑一个看代码啊,我这主要是讲一个语法,大家不要去特别的纠结函数好不好,函数后面我们马上会详细的讲,你看啊,我输一个A,你看。它返回的是周二猴子当小二,为什么?因为你输一个A过后,这个函数把它加了一个一,你这个函数把这个A加完一个一过后是什么呢?它对应的这个阿斯克玛值就对应这个B字符的阿斯克玛值,于是就匹配到这个了,能理解吧。
06:08
所以说我在这呢,重点就是要强调什么呢?说我们这个表达式其实也可以是个函数。OK,甚至你还可以对它进行运算,说老师我再加一个一,这都可以啊,这都可以,很怪吧,那他都可以的,包括你把这个代码这个地方的写到这里面来,写到这儿也是可以的,我就不一个个举例了,你看我再举个例子,你看。如果这样写的话,同学们,我,我输一个A,大家想我匹配到什么了?我输一个A字母,本身这个函数给我加了个一,然后到这地方又加了一个一,是不是相当于匹配到C了呀,相当于加了两个吗?加了两个一二吗?来跑一个再说一遍啊,我这主要是讲语法现象。讲语法现象啊。语法现象大家不要去特别的纠结。语法现象不要去特别纠结为什么这样用啊,就说别人在用的时候,如果有面试官给你出这样的题,你呢,能够告诉他这样用是没问题的,我主要是想强调这一点。
07:08
明白来吧,走一个来,我仍然输入一个AA,大家想这个时,这个时候它会输出什么信息啊。她会输出舟山猴子爬雪山。对不对,没问题吧,为什么我就不再解释了吧,那有些同学老师你输一个。B呢?如果我输一个D的话,那就是B加了一个一,再加一个一就应该是D了,对应D的阿斯卡玛值,那这个时候没有匹配上,就会就会就会输出输入有误。没问题吧,好,这个这个案例我就写到这了啊,这个案例我就写到这了,大家注意听语法现象,好,我把这个小案例呢给同学们放到这里来。好,同学们,我把这段小案例给同学们放到笔记里面来。我代码放到这啊OK。好,整理一下笔记。
08:00
放好。那笔记呢?我们要写就把它写全乎了。好,从第七行开始截取对不对。第七行,截取到我们的笔记中去。把幻灯片这个地方放小一点。然后我们截到了第26行,26行接着往下走。26行就27行了吗。27行,那这里呢,我强调的一点呢,就是我们这个表达式,其实它是可以只要有一个值就行,注意这个值是函数返回的,还是你运算得到的都可以,注意啊,这儿可以写,那K这地方是不是也可以这么写啊。我就不再举例了吧,就case要么也可以写成一个函数啊,或者是个变量都没问题。我把这一块呢,也放到笔记里面去。整理一下我们的板书。整理一下文本书。好这块呢,我们就说到这儿,那第二个来看第二一个。
09:00
第二个使用细节看一下,他说啊,Case后面的各个表达式的数据类型必须和Switch的数据类型一致,这什么意思呢?来看一个案例,比方说同学们看我这里有一个变量叫N1,明白,然后呢,我写了个INT32 OK,我给他了一个20。啊,给他一个20没问题吧,然后呢,我写一个Switch语句。说一句好,我写N1。那么此时此刻我还有一个变量N2,注意听我有个INT64。六四我也给他一个20,没没问题吧,好,同学们看KN2。如果我先这样子啊,我先把它也写成三二。走。这个时候N1和N2,因为他们是相同的数据类型,大家看此时此刻没有错,我写个OK1。好,我就写写到这,我先写个default啊,如果没有匹配到呢,我有个default值对不对。
10:05
然后呢,我这写一个叫没有匹配到。没有没有匹配到啊,那同学们看一下,此时此刻,如果我一运行的话,大家想一想这个地方会输出什么,一定会输出OK1啊,这地方为什么错了,看一下。哦,这个单词print。好,这样就OK了。没,没毛病吧,好,那为了不让刚才这段代码影响我们呢,我们先把它注销一下,来同学们跑一下。跑一下。这时我们应该输出OK1。匹配成功。但是同学们注意听我说的,但是啊,如果我把这个三二改成六四。代码就会出问题。大家看他提出什么错误啊,他说看这里他说无效的一个匹配,为什么呢?第呃,Miss match match就是不匹配,那么什么呢,就是INT64和INT32不匹配,因此在这就错了,因此呢,从这地方我们得出一个结论,什么结论呢?就是我们的这两个表达式就是。
11:08
Case的表达式的数据类型要跟哦,就是Switch的表达式的数据类型要跟case的数据类型保持一致,否则会报错,能理解吧?好,我们提到这里。N1,这错了,错误原一,原因是N1N2的数据类型类型和N1不一样。不一致。不一致能理解不一致,所以就错了,好这注意一下,但是我再说一下啊,同学们,我再强调一点,如果说我把这个N2直接改成20呢,这个是可以的。这个为什么可以呢?因为它是一个具体的值了。这个24个具体的数,它本身并不带数据类型。所以说你就相当于说这样理解,你说哎,你就这样说,我能不能把N2,我能不能,我能不能把20付给N1,当然是可以的,所以它这个就这这样是可以的,但是如果你把它改成N2这个就为什么就不行呢?
12:07
因为大家想一想,你能够把N2直接付给N1吗?显然是不可以的,因为N1和N2的数据类型不一样,但是一个具体的值是可以的,因为具体的一个值它并没有包含这个数据类型在里边,是这意思吧,所以大家注意这个地方啊,好,我把这个给大家写到这来,注意数据类型要保持一致,否则会报错。我把这一段代码给同学们复制到笔记中去,那么我在这里呢,就给同学们说了错误的原因。来放这儿吧。没,没毛病,紧接着呢,我们继续来给大家看第三个细节,就是在勾浪里面呢,Case后面可以带多个表达式,中间用K表达式把它分开就行了,那举个例子,比方说现在啊,我把它改成32。
13:02
我可以写多个表达式看,比如说这门我修匹配十也可以,匹配五也可以等等都可以。那大家看这里它就是有多个表达式了吗?只是我这写的是一个什么呀,写的是个常量而已,也就是说这个N1如果等于N2,或者N1等于十,或者N1等于五,我都匹配到。能理解这意思吗?就是它这个是可以带多个表达式的,好,写到这里就说case。Case后面后。后面可以有多个表。答,四。啊,这是可以的,当然表达式里面呢,还是跟老师刚才刚才讲的,可以是个常量,也可以是个变量,也可以是一个什么呀,函数,甚至还可以运算明白,最后我就不再多说了好不好,那同学们看,此时此刻,如果我把这个N1改成五。同学们琢磨琢磨,是不是也输出OK1啊,因为你N1,你N1跟他匹配的时候,发现跟NN2没有匹配成功,他会跟十再匹配一下,再跟五匹配,诶发现五相等,所以说这个时候呢,它会输出OK1。
14:15
跑一个,你看他还是输出OK。没毛病,所以说这地方呢,体现出go浪的又一个case后面的一个特点,注意同学们注意,好,我把它也给同学们放在笔记里面去。这是我们说的第三一个特点啊,第三一个特点。搁这儿。放好了吧,放好了,那放好过后呢,我们再看第四一个特点,第四一个特性是什么呢,朋友们。第四一个特点是什么呢?看一下这里他说啊case后面的表达式如果是常量值,或者叫字面量,因为常量我们就经常叫字面量,什么叫字面量呢?就是直接写出来的,在字面上直接看出来这个值了。但是。
15:06
这是可以的,但是不能够重复,就是你后面这个表达式,如果是常量子啊,就不能重复,怎么个意思呢?注意看这里,比如说你这写了一个五,已经有一个五了吧。大家看这里。如果我在这,你看啊,我case又写了一个五,同学们这个地方就不允许。追星奖。Fmt,我再输出一句话,OK2。OK21个波浪号。当我一保存这边就会报错,我们看哪里错了,看这里,他说写的非常清楚,他说。Do you play k。就重复的意思,Case这个五重复了,为什么呢?Pre啊pre就是在前面的43行,这地方你已经定义了一个五,是不是43行啊,看国在这在第十四十四十三行的时候,你写了一个五,那这个地方呢,你看就不能再写了。
16:04
所以说如果你是自变量,你这写了一个五,你这写个五,那就没有意义了,他不允许,说白了他就不允许,从语法上它是不支持的,那有些同学要问了,说老师我能不能再问的再深入一点,假设我这有有个N3,我写了一个五,我们看看编译器能不能把它检测出来,比如说我把这个N5改成N3。跑一个。哎,你来看。他还是怎么样?他说诶这个地方我们看他写的是什么呀?哦,这个地方是另外一个,它是数据类型不匹配的问题,因为你这个三默认是int类型是吧,那我把它改成INT32。刚才说的是因为数据类型不匹配啊,再来走一个。哎,我们再看。骗过了这一个编译器骗过了吧,实际上你这还是五吗?但是骗过了。所以说别人给你出一个出一个题,你得你得反应过来啊,所以说你看老师在这写的很清楚,说如果是个常量,或者我们叫字面量,则要求不能重复,但如果你是个变量,它检测不出来。
17:05
如果他说N3 N3其实还是五,对不对,但是呢。编译器它检测不出来了,编译器没有那么智能,你直接写五不允许。但是呢,你写一个N3,他认为是个变量,它就没去检测了,你看。看到没有?好的,这地方是不允许的啊,好,同学们,我把它写到这里来。这里我写个错误。错误啊,这是错误的,为什么错误了,错误因为这个前面。前面我们已经我们使用了。有了有什么呢?有这个常量了,有这个常量五,因此这里不能,因此这里就重复了,因此重复了。重复就会报错。就会报错。啊,但是呢,我说了啊,变量还是可以的,如果你写个N3等于五,它它是骗过编译器了,这点请同学们一定要高度重视,那我把这一个呢,也给同学们放在我们的笔记中。
18:06
来吧,说这些细节,请同学们一定要认真的去体会。小心我们的面试官给大家出一个这样的带陷阱的测试题。放这就可以了。那我们再看第五一个细节,Case后面不需要再break语句,程序匹配到一个case后,执行对应的对码代码后就会退出Switch。啊,就会,就是如果一个都匹配不到,则会执行default,这点是不是在前面已经讲过了,这就不再多说了吧。再讲过了第六个细节,Default语句不是必须的,怎么个意思呢?就说有些同学老师我不写DEF行不行,可以。你不写大不了就是一个都匹配不到吗,那我在我在这边再写个别的啊就是。因为刚才这个错误的信息呢,我已经有了,所以说我先把它拿掉。大家看这个地方,我我这里啊,我把它改成51来看,你51跟这三个是不匹配的。
19:04
51跟90也不匹配,对不对。那一个都匹配不到怎么办呢?后面有没有default,那怎么样呢?大家想一想,是不是相当于什么都不做嘛,就什么都不输出就完了。这是可以的,那我们来执行一下,跑一把。好吧,我们发现什么都不输出,退出来了,直接退出,所以说default语句是可以有也可以没有的,这个呢我就不再多说了。这个我就不举例了啊,这个我就不举例了,大家一看也就很清楚,同学们关于前面的六个细节,大家看理解没有?重点要注意哪里啊?重点我给大家再提一下,尤其是。Case,当然这个地方也可以Switch啊,Switch后面那个表达式都可以。Re。Switch后面就是case,或者Switch后面的表达式呢,可以是常量、变量,甚至是一个有返回值的函数,这点是同学们一定要注意的。第二个呢,我要强调就是数据类型要保持一致,如果数据类型不一致的话呢,它是要报错的。
20:05
他是要报错。呃,还有一点就是表达式可以有多个,这一点也是go Switch的一个特性特性。常量值这个不能重复,这个很很很轻松啊,这刚才也讲过了,第五第六呢,是前面都已经说过的好,那关于第一部分细节呢,我们先给大家聊到这里。
我来说两句