00:00
接下来我们要学习的第八章,也是scla当中非常有特色的一个内容,那就是模式匹配。其实这个概念之前我们在介绍流程控制的时候已经提到过,我们说在skyva当中并没有Switch关键字,那怎么样去实现Java当中类似的这种多条件分支的判断呢?呃,一种方式当然就是不停的if else啊,直接把它展开是可以的,那能不能直接像Java里边的Switch Switch case一样,把某一个值直接按照不同的取值平铺展开呢?诶,在SC里边是可以这样做到的,他用的语法只不过就不是Switch case,而是。而是match case就是我们所说的模式匹配,那首先我们先来回忆一下Java当中的Switch case是怎么样去做这样的一个条件分支判断的,那它的语法简单来讲就是有一个变量,呃,它可能有某一个值,那接下来呢,我们用Switch这样关键字判断一下它的值,后边跟上KK的话,那就是如果只等于,哎,比方说等于十的话,那接下来我们要干什么事情?
01:12
干完了之后,诶,Break退出,那如果要是等于20的话,我们再干什么事,Break退出,最后呢,前面的如果都不满足,最后我们可以有一个default,就是默认情况下兜底要做一个什么操作啊,那最后break,这是Java里边关于这个Switch case Switch case多条件分支的一个语法,那在skyla当中呢,它的模式匹配其实可以非常轻松的实现类似的功能,而且还更加强大,那接下来我们就给大家介绍一下。模式匹配的基本用法啊,我们先看一下基本语法,基本语法就是match case啊,那基本上这个看起来跟Java里边Switch case还是非常像的啊,它的语法写出来的话应该是这样,就是我们先定义一个变量啊,然后变量去做一个match match后面呢是画括号,里边是case各种的值,然后注意后边做具体。
02:13
符合这个条件的时候,然后执行操作的那些定义呢,是在后边有一个向右的箭头,就像之前我们拉姆达表达式里边函数体的那个定义一样啊,那这里边我们是相当于就是前面如果符合某种条件的这种呃约束的话,那后面我们就直接执行后面这部分代码,这里也不需要有break语句。这里边默认就如果匹配了之后,那么就不会执行其他的语句了,然后最后呢,还可以有一个case,一个下划线,这个下划线通配符嘛,那其实它就表示前面都没有匹配到的话,到这儿它一定可以匹配上,诶那就是相当于类似于Java里面的default语句了啊,这里边就少了很多关键字,但是所有的功能都能实现,那我们还是在代码里边具体来看一看,测试一下,当前是第八章,我们新建一个。
03:12
零八,那么在下边去创建一个。In的测试对象object test1我们现在要测的是模式匹配at match。啊,一一本的内容啊,一本语法face首先啊,那我们就来看看一本基本定义语法,然我们还是定义一个X啊,定义这样一个值,它是一个整数类型的值啊,那比方说值是二,那么接下来我们可以定另外一个变量,那么这个呢,它的值我们定义一个string的,这个string值跟X会有所关联,就是我们要判断X的值是什么,然后给Y定义一个值,那比方说那我们就判断了啊,那如果X值是一的话,那么Y就是Y,那么X是二的话,Y就是two X是三的话,Y就是three啊那。
04:25
X是四的话,Y就是four,大家想如果要我们用if else写的话,那也有好多if else,所以当前这种需求用在Java里面,用Switch case肯定是最方便的,我们这里呢,可以用match case X match,然后这里边大家看用补全啊,接接写这个case,如果是一的话,是一的话,诶,我们这里边接返回的是啊,那接下来如果是二的话,返回的是负,如果是三的话,返回的是瑞。
05:04
那所以大家都可以不停的写下去啊,假如说我们不可能把所有的情况都列举完的话,如果来了一个默认,默认的一个配啊,我们这里面就是其他的所有情况default什么呢?来输出一个other。哎,这个其实就非常的简单,这里我们可以直接line y。我们知道当前如果直接做一个打印的话,输出的当然是吐了,那如果说当前给一个单的话,输出的就是。对啊,那如果要是给一个五的话,当然输出就是other啊,这个就是非常简单的实现了多条件分支的一个判断和选择,这是基本语法,然后接下来呢,我们再来举一个,呃,稍微复杂一点的事例,就是看看这个东西还能做什么比较高级的事情,我来举一个事例,那么这个事例呢,类似于之前我们定义的。
06:07
函数的高级应用的那种方式,我们之前曾经定义过,就是二元运算的,这样的函数我们要传的呢,是一个,呃,是传一个函数本身进来,作为二元运算的一个操作,而二元运算的两个数我们应该是提前定义好的,那像现在呢,哎,我们我们其实可以不传。一个函数作为我们当前的操作,因为大家想到我们当时那个二元运算不就基本的不就是加减乘除吗?所以我也可以直接传一个字符,就是加减乘除,那个字符传进来,我就可以直接判断当前应该调用什么样的二元计算了,哎,所以当前我们就是用。模式实现。点N的两数,呃,就是二元。
07:05
运算,那这里边我们还是先把两个数先定义出来,A等于25 B等于13,然后接下来我们就可以看一下要定义的这个二元运算啊,我们DEF把它写出来,当前我们管它叫呃,Match Du,呃,Operation啊,Op,然后里边我们要传的那就是一个op了,原先我们的操作是定好两个数之后,下边做这个操作那是直接传,要传的是一个函数,我们现在不用传函数了,这就简单多了,一个差不传进来就完事了,那它应该怎么实现呢?这里边我们的实现就是判断这个op,这个叉到底是什么东西,Match一下,如果当前是。
08:06
加号的话,那非常简单,我们这里直接返回A加B,这是AB直接在外面定义好了,对吧,就像全局一样,如果我们作为参数的话也是可以的,然后另外如果要是减号的话,那就返回A减B,哎,同样的概念啊,这个我们知道,如果乘除都可以直接用这种类似的方式一个实现。五那是,呃,或者我们还可以定义更多的对吧,比方说像这个曲模运算也是一个二元运算,同样可以把它放在这儿,那另外我们会考虑发现其他的场景,那我们就说,哎,当前这个呢,就是我们干脆说它是语法语法运算符吧。
09:04
出入非法,哎,这就是我们当前对这一个二元计算函数的一个基本定义,那当前如果说我们想要测试一下的话,呃,大家可能看到就是这里边我们返回的是一个any类型,对吧?呃,这里边为什么它默认这里边返回any呢?因为当前我们A加B本身A和B都是一个int类型,那正常情况下我们返回int,那这里边呢,我们在默认情况下又会返回一个string,那如果说一个值类型和一个引用类型要取它们的共同负类的话,那就只能是an了啊,这个是自然能想到的,那或者呢,这里比方说我返回一个负一,那这里面默认当然就是int了,对吧?呃,直接返回一个。应对性这都是完全可以的啊,那这边我们可以就直接做一个调用打印了啊,比方说调一个传一个二进来啊,那对应的我们也可以测一些别的。
10:04
另外我们可以传一个符号进来啊,另外我们还可以比方说给一个非法的啊,比方说我们直接给一个反斜杠进来啊,那接下来当然反斜杠的话,我们作为这一个字符传入的时候需要做一个转移啊,那接下来我们做一个测试。当然这里边输出的就是38,哎,这是两数相加的结果,那除之后呢,呃,这个25除13只有一个嘛,所以是一,那另外这个反斜杠,那就是一个非法的字符运算符了啊,这就是我们对于模式匹配的一个基本的使用和定义。
我来说两句