00:00
后边我们接着来吧,乘述追击,我们再把后面的几个细节给大家讨论一下。第七个细节,注意听Switch后面呢,可以不带表达式,类似于多个,类似于什么呀,类似于一个if else的分支来使用的,这一点比较比较奇怪,但是呢,确实它有这个特点,什么意思呢?我给他举个例子。第七第八,我们把这几个都把它先放过来好不好?先把它放到我们的笔记中,注意听讲。没问题啊,第七第八我们都放好了,那我们来看看,嗯,第七个特性是什么意思呢?举例说明,他说Switch后边可以不带表达式,类似。If else这种分支来使用了,那我给大家举个例子,这点也很重要哦,同学们看,我把这块需求先给同学们放过来。举例说明。比方说同学们,我这有一个H变量int。等于多少呢?比如说我等于十好不好就等于十,那我直接这样写。
01:06
这样子这样说啊,注意听。Swi,什么都不行。在这里我不写表达式怎么办呢?我这样写。K10。Age。等于看到没有十,它可以这样写,如果这个条件满足。他直接当成什么呀,就直接当成一个if钥匙的这种东西来用了,看我说出一句话。他允许这样写啊,那我把这一句话呢,就输出到。这个位置。同样,我可以继续写啊,我说K,如果A值等于多少呢?20是吧?我又说出一句话。就是H等于20。等于20。Default呢,我也给他写一个吧,一般情况下会有一个default对不对,那我也写上default呢,我写一个,那是就是没有匹配到没有匹配。
02:05
代码写完,大家看这个语法有毛病吗?你看。他没有报错,那也也也就意味着其实你你这样写的话,就有点类似于把。这个Switch当做一个什么来用呢?当做一个if else的分支来使用,它也是允许的。也是允许的,那么我们跑一跑。我把上面的代码先怎么样,先注销一把好不好?先注销一把,好,我们看看这里能不能跑起来呢?走,跑起来,走。那么看它直接输出H等于十,匹配成功。必须成功。甚至他还可以这样子说,老师,他能不能进行一个范围的判断呢,也可以,他甚至可以当做一个范围来使用,我们看啊来做。甚至啊,甚至也可以就是。K这里中也可以对H的范围。H范围。
03:01
范围进行判断,进行判断。这点就比较奇怪了,但是确实可以,你看我再给他写一段代码。来走一个啊下呢又是一段。Switch语句我可以这样写,如果age,比如说我有个分数这样子呢,我我这样子啊。对范围进行判断,我重新写一个吧,这样子大家在上面呢,不会蒙圈,我写一个分数的,有个成绩,Score有个人的成绩,比如这个人的成绩呢,是30分。我做一个判断了。我做一个判断,我怎么写呢?我说score。考这个成绩,如果这个成绩大于,如果小于啊,我这样写这样写吧,如果它大于90分。如果他大于90分,我们就输出优秀。成绩优秀没没毛病吧,那如果说我写一个这样的范围,我说靠。大于等于这个。
04:03
其实。并且,并且啊,我故意这样写一下,小于等于90。他甚至可以这样写,那写一句话,什么呢叫做优良?成绩优良。成绩优良。OK。那么甚至我还可以继续写很多其他的条件,我就不写那么多了好不好?再来一个及格吧,Case。如果我们这个乘积呢大于等于60。但是呢,还满足一个条件,号小于70分,我们就叫及格。没问题吧,这个这个也很也很简单,我把它写这里叫及格,成绩及格。对不对,其实同学们也知道,后面这个条件我可以不写,对吧。呃,这个因为我们以前讲这个if else的时候其实也讲过,但是我写上的主要是告诉大家他语法支持这种写法,明白这意思吧,好,最后呢,就是。
05:01
不及格。不及格,重修不及格。好,代码看写完了看这种写法也是OK的,我保存一下。保存一下来吧,我们来试试,此时此刻它能运行起来吗?30分显然不大于他,也不在这个范围,也不在这个范围,那么必然落在default范围。也就是说他会输出不及格。我们来执行一把。走。Age。还是等于四,这输出不及格,就是这是我们后面那段代码的输出,那我把这个成绩呢改一下,比如说我把它改成90分。如果是90的话,是不是是不是就落在了这个范围啊,那就应该输出成绩优良优秀啊优良走跑起来。看代码。我们可以看到它输出了成绩优良,跟我们的分析呢完全匹配,所以说同学们我们要注意Switch还有这种用法哟。
06:00
这种用法在别的传统的编程语言的Switch是不允许这么用的,但是go浪它就可以这么去用,所以说你不服不行,对不对,那既然你学这个语言了,你就必须去。去理解它,去用使用它,他就有这种用法,还是很有意思的一种写法啊,所以说我们说king Thompson这个哥们呢,所以说还是一个比较奇怪的啊,还是比较奇怪的,那我们把它整放到我们的笔记里面去,大家看一下。来吧。把这一块整体放到这儿,好,我把上面这句话也放过来吧,干脆。也不在乎多结的那么一行,大家看这里我说的含义。所以后面也可以不带表达式,对不对。然后呢,我把这个第七个细节放到这。好了,同学们,我们现在来再看第八一个细节,Switch后面也可以直接声明和定义一个变量分号技术不推荐,就这种用法可以用,但是呢,我不推荐啊,我们来看看这是一种什么语法现象。大家。
07:02
跟着老师的思路动起来。各位老师说了啊,那么我们看Switch它是怎么一个用法呢?它可以这样用,你看你上你上面这个代码,我们就就用上面这个写法。他他也可以这样写,说老师,呃,我这个定义能不能直接写在Switch这,它是支持的。你上面这个写法甚至可以这样写成。它可以写成这个这个这个样子很怪很怪,呃,为了以示区别呢,我们把这个变量换成另外一个值吧,比如说great好不好,大家看起来我就上面不用注销了嘛,Int它可以直接这样写,同学们。非常有意思的写法,直接删掉。粘贴他这样写grade。等于。就是分号。也可以。这样就相当于说,相当于什么感觉呢,就把这个定义。就定义或者要声明一个变量,直接写在Switch的屁股后边,然后用一个大括号来匹配,那当然了,这个地方我们可以把score改成这个。
08:07
对不对,改成这个。允许吧,允许。允许这样写法也是可以的。看我保存了啊,我保存过后看看没有报错吧,没有报错,那那么我们看看这个代码能不能跑起来呢?为了以示区别,我在这个优秀后边加一个尾巴。为什么加个尾巴,这样才表示我们写的代码输出有变化了才说明。不跟上面冲突嘛,所以你看这是我们写代码的一个比较好的一种方式,来区分我们代码到底是否生效了,对吧,这样写。在勾浪中go浪中允许这样写。可以这样写了,他支持这些语法。那同学们,来,我们跑一把吧,看效果。运行起来走着。你看仍然输出成绩优良一个波浪号,这个波浪号就是我刚才写的呀,是写的说明代码是完全正确的。对吧。
09:00
诶诶,这个成绩优良没没毛病啊,成绩优良是的是输的这个啊没有输输成绩优秀好,因为他90嘛,刚好落在这个范围,所以这种写法也是OK的,我把这一段代码呢,也给同学们拿到笔记中。以后便于大家的复习,对不对。来吧,朋友们。但是我再说一遍啊,同学们,我再多说一句,不推荐啊,老师,这种写法我们能不能大量使用呢?这种写法我并不是特别推荐,因为这种写法。感觉哈,不是那么的清晰,这个思路不是很清晰,你干脆就上面写一下再定再用,所以我并不推荐,如果大家一定要用,我也没办法,对不对,你一定要用,谁架得住你一定要用呢?我还是推荐大家用用我们正规的方式去写。好,这是第八个细节,那第九一个细节呢,我们接着来看,Switch呢,还有一种语法现象叫做Switch穿透,它有个关键词叫for through。For输入,For输入就是穿透的意思,这个单词啊,你们可以看一下是酸透的意思,那如果说有这样一个需求,说同学们说老师我就有这样一个需求,就是说如果case与局后增加一个报入,就会继续执行下一个case,就说我只要匹配到十了。
10:17
我希望11继续执行。就说不要跳出去。有人这样,有这个需求吗?也有可能有,但是比较少。所以说就叫这个就叫Switch穿透。Switch穿透。这个知识点,那么我呢,给大家演示一把。就是睡去穿透。好,同学们,跟上老师思维思路啊。我们演示一下Switch穿透。穿透。啊,这就其实就是就是一个关键字,这关键字for输入。THRO。GT输入啊,For输入,那我举个例子吧,这个例子大家一看大家就非常清晰了,比如说我这里有一个有一个变量VR,比如说这个变量叫number int等于多少呢?等于十,很简单。
11:11
我写一个Switch。对吧,那这地方我number就用number去匹配,是不是case。如果它就等于十。如果它就等于十,那么我们就输出一句话,我们就输出一句话。这句话呢,我们就叫什么呢,OK1简单吧,然后呢K20。我们又说出一句话。然后呢,我输出一句话叫做OK20 ok2。没毛病吧,紧接着呢,我们来一个呃,Default。Default default呢?我写一句话,没有匹配成功。对吧,没有匹配到。那么为了增强这个效果呢?我这干脆再写一个CASE30好吧。
12:04
GA30到OK3完事,那同学们看啊,如果按照传统的方式来执行,同学们都知道。因为number等于十,它跟这个匹配到了,匹配到它就直接输出OK1,他的OK1输出完了过后,是不是代码就直接走人了呀。所以这个时候默认会输出OK1,这个我就不演示了,因为讲过很多遍,但是如果我在这加了一个这个关键词。我加了一个for入,那就意味什么意思呢?就是穿透,穿透意思就是说我输出OK1过后,紧接着马上再输出OK2,不用再去判断这个是否成功。当然他执行完这个过后呢,OK2会输出,OK3会不会输出呢?不会输出。也就是说,它只,它只能穿透一层。默认只能穿透一层。默认只能穿透。
13:00
穿透一层,你别你别说有很多层啊,那如果说同学们说老师我想把这个也穿透怎么办呢?你再加个for输入就行了,但是吃饱了没事干对不对,本身人家就这种代码,原先很清很逻辑很清晰的,结果你你搞一个这个穿透,说老师那假设我十和二十两个都想执行同样的逻辑怎么办呢?那简单嘛,你整一个这个不就完了吗?人家早就给你想到了。对不对,所以说你不要去乱搞啊,所以这个穿透呢,我建议大家不要不要多用,那我们先跑一跑吧,毕竟这也是个语法现象,不说呢,就担心同学们以后在工作中看到这个写法,不知道是不是,如果你真的希望十和20执行同样的逻辑,其实你就把两个陈列写在一起就完了,一个逗号隔开就完事了,能理解吧。所以说我们的。这个go让设计者其实已经把各种使用场景都想到了,那跑一跑。走一个。跑起来看效果,对方会输出OK1和OK2都输出了吧?
14:04
因为你穿透了假设,我们没有这个只会输出,只会输出OK1对不对。讲过吧,那有些同学老师我在这来再穿透你试一下,如果我再来穿透一下。RROUGH。那如果说我们在这再穿透一次,你会发现说说OK1OK2和OK3,但是这句话呢,仍然没有穿透,因为它这地方穿透完了,只能穿透一层,到这没有foul入这个default呢,还是看不到,好,我们来执行一下。没问题吧?会输出OK1、OK2、OK3。答案正确,好,这呢,我就说到这里啊,说到这里,那关于Switch书,呃,穿透的案例,我们把它放在笔记里面来。所以穿透。的,我直接写一个啊。
15:05
好,那刚才呢,这个案例先翻过来再说。把案例放过来过后呢,同学们,诶,我把这个关于它的说法,我也放到我们的第九一个这个位置,让大家一目而了然,对吧,一目而了然还有一个第11个细节,我们在乘胜追击,把它说完算了,第11个细节是什么呢?叫type Switch,这个呢,我就不演示了,我就简单说一下好不好,我就简单说一下,这个我就不演示了,听听老师说,嗯。Type Switch是个什么用法呢?注意啊,因为大家还没学interface,先告诉大家,我这也不演示,我就直接告诉他结果type Switch是Switch语句,还可以用作。它可以用作用于什么呢?Type Switch来判断某个interface变量中实际指向的变量类型。那么interface是什么呢?Interface接口。
16:02
是借口。接口我们还没有讲,但是呢,因为刚好这又是type Switch语法,所以说我在这提一嘴,后面讲到接口的时候呢,我们我们再来回头再看这个就很清晰了,它这样子的。这是一个空接口。这是一个空接口,我简单解释一下空接口,那么这个地方大家一看是不是一个把一个小数float交给了Y啊。然后再把Y呢,交给了X啊,交给了X,这是想把把Y这个float float变量交给了X,这个时候呢,它用了一个x.type这个就是type使用。这个会干什么呢?X点括起来,Type会把这一个X,它指向的真正的数据类型给求出来。什么意思,也就是说,比如说你这个X是。是是把Y付给了X,那么这个X呢,它本身是一个interface,对不对,但是因为你把Y付给他了,所以说这个X呢,它真正的数据类型其实就是float。
17:05
六四,于是乎呢,这个I。这个I就是它会这个I呢,就会得到。这个X指向的真正数据类型,比如说这里就应该是float。60。这边就应该是float。类型,那这个时候呢,就判断诶是一个空呢,诶它输出是什么,如果是个int呢,就输出X是个int类型,如果是FLOAT64,就是FLOAT64,以此类推。以此类推,甚至它还可以是个函数。甚至可以判断是个函数啊,接口也可以接收一个函数,只是现在我还不讲那么多,是个布尔呢还是个呢,诶,都可以。说白了,说的再直白一点啊,说的再直白一点,就是我们这个x.type呢,结合Switch可以去判断一个空接口实际指向的数据类型,就这么一句话再说一遍,就说X点10V x.tap。
18:01
这个。这个运算结合Switch,结合Switch可以去判断X这一个空接口究竟是指向哪一种数据类型,就这么一个意思,好,这块我就不去演示了,这块我不演示,后面呢,我们再讲接口的时候,老师再给大家详细的说明,这你这有个印象就行,好我先呢把这一个细节把它放在笔记里边去。因为同学们现在还没学接口,讲也讲不清楚,对不对,讲也讲不清楚。好的,我先把这一个。案例也给大家看到,如果在听视频的同学呢,你们可以把老师的这一段案例呢,在你的Vs code里面敲一遍,敲完了过后你看输出什么,我告诉大家结果应该是X是FLOAT64,因为你Y是一个FLOAT60,如果我这个Y的类型,假设我这个Y的类型是个int或者INT32,诶,那么这边它会如果是个int啊,如果是int,它会X等于X等于int,当然你还可以写INT32T64等等等等。
19:08
所有的数据类型它都可以进行判断,能理解。好,同学们,那关于我们Switch的这些十个细节,老师就给大家讲到这里就讲完了,你只要把老师讲的这十个细节都理解了,或者说都掌握了,那我可以负责任的讲,你在做开发的时候,用到Switch的语法上面就没有任何问题。那下边呢,为了加深大家的思维去理解,我们一会儿呢,就要给大家做课堂练习了。好,关于细节我们先给大家讲到这儿,课堂练习呢,我们下一个视频再给大家详细的讲解。
我来说两句