00:00
好的,同学们。那根据我们韩老师讲课的一贯风格,是不是应该开始讲函数,并且来一个快速入门呢?是不是没问题,咱们就按这个套路来走啊,咱们就按这种格式化的东西来给他分析,然后呢,然后呢,你就明白这个函数怎么用了,来看,首先我们来介绍一下何为函数。函数我这先这介绍了一个基本的功能,所谓函数是未完成某一个功能的程序指令的集合,或者叫做程序语句的集合,称为函数,其实特别简单,就是把一些功能合在一起。那么我们就把它叫函数。那么在go语言中呢,函数有自定义函数,也有系统函数,什么叫自定义函数?听其名而知其意,就说你自个儿写的函数就叫自定义函数,什么叫系统函数?就是系统给你提供的函数就叫系统函数,你比如说前面我们用的这些,其实就是系统函数,你比如说这里。Format printen。这个就是一个系统函数。系统函数很多啊,你看同学们看API里面大量的都是系统函数,你比如说我们打开这个勾浪的源代码。
01:08
高呢,比如说我们前面讲的,我们安装了一个go。对吧,进到这里面去,我们打开GOS。就到这里面,你看我随便找一个啊,比如说我们就找这个我们熟悉的format。或mind打开这里面,这里面写的东西其实都是很多很多很多的函数,你看这里。再看。这个。看看这个是不是就是一个函数啊。这个是不是又是一个函数啊啊,对不对啊,这这个还是个方法啊,不好意思,这是个方法,这是一个方法,还不是函数,我们找一个函数。嗯。这些都是方法。啊,为什么呢?方法和函数还有还有一点微小的区别。我们找一个。诶,这边全都是方法对吧,这边全部都是方法,还不是函数。
02:02
OK。呃,这地方还没找着啊,没找着,我们我们打开这个手册找一个吧,我们打开手册找一个来,我们新造一个,我们在这找一下官方手册。走了。够了。官方官方手册,我们找一个吧。官方手册。在这里进去。打开对吧,这面这么多包包啊,这么多包包,我们找一个,比如说首页。首页。我们找一个,我们前面讲的有个ma。Math方法数学对不对,数学你看这里面。呃,我们看一个啊,看这个那na。看这个,这个就是一个,这个就是一个函数。这个就是一个函数,看到没有,这个也是一个函数。就是判断是不是一个。值就是说返回一个是不是数值的一个函数,这边也是,这边呢也是一个函数,看到没有,这边也是个函数,等等等等等等,这都是函数,这块都是函数,对不对,那函数很多,这就是系统函数了,这就系统函数,那么我们我们讲到函数呢,就是有两大类,一就是自个儿写的函数,一种就是系统给我们直接用的函数。
03:18
OK,好,这是函数的基本概念,我们先抛出来了。函数的基本概念我们先抛出来,那写到这里,函数的基本概念。我们把基本概念呢,先放在我们这一块,给他一个标题二。对吧,把这个概念先抛出来。我把函数的概念先放到这里来。没问题吧?什么叫函数有个基本认识。好,函数我们就说到这儿,那下面呢,我们继继续来看,既然你有函数的基本概念了,下面我们就趁热答题,我们就什么呢这样子。来说一下函数的基本语法,我们来看一下函数长什么样子,函数是这样子的。
04:02
首先呢,Function这是个关键字,这是不能改的。它是个关键字,红色是关键字,这个地方是我们的函数的名字,就是一个标识符,相当于这边呢,是我们的参数列表,我们也管它叫行参列表,这边是返回值类型列表,或者叫返回值列表都可以啊,叫返回值列表啊都可以,那么这里面带个大括号是必须有的,这是一对大括号,表示在这里面是我们的函数体。函数题里面呢,有我们要执行的语句,或者说这个执行的语句就是我们要完成的功能。啊,比如说一个计算的功能,或者是一个统计的功能等等,那么这个return在这里大家看了就上场了,这个是表示返回一个什么值,从止终止该函数的执行,就说它这个return有两个作用,第一个它可以返回一个值。第二个呢,它也表示终止这个函数的执行,就是它在终止的时候给你返返回了一个值,明白我的意思吧。
05:07
好,大家看我这整理了有三句话,何为形成列表?形成列表就是表示函数的输入函数中的语句,表示为了实现某一个功能的代码块,就是这里面是我们代码块函数的返回值,这个函数呢,可以有返回值,也可以没有,就是如果你没没有返回值,你就不要写,就直接return就完了,能理解。好,这就是基本语法,是不是也特别简单?那么有了这样一个基本语法的一个基本介绍以后呢,我们就来快速入门,用函数解决前面的计算问题,当这个快速入门的时候,给大家一讲完,你马上就对函数有一个比较形象。比较比较形象的一个认识了,大家就觉得不抽象了,所以说在快速入门里面呢,我们直接就把这个函数的使用。这个地方大家就可以深切的体会一下,好,来吧,现在呢,我们就把这块东西给大家整理一下,然后我们快速入门,跟上老师思路,好,刚才我们讲了函数的基本语法。
06:07
当然,我现在还没有讲细节啊。我们还是老规矩,先把这个快速入门讲完了,过后再逐一的给大家讲解它的细节,能理解。就是先来一个对它有个认识嘛,对它认识过后我们再讲细节,那现在先不谈细节来吧,我把这一个基本语法放到我们的笔记里面去。没问题吧,然后我们这儿说了一个函数的什么呢?我们叫函数的快速入门。快速入门案例。来,我们写到这儿。这是我们的标题,快速呢,还是个标题二吧,好不好还是标题二,说明一下,使用函数解决解决前面的计算问题。大家看一下代码,代码走代码了,看代码怎么走。
07:02
来吧,打开前面的这段代码,你看这里面我们已经出现了一次Switch。两次Switch,三次Switch,我全部要把它解决,怎么解决呢?他的思想是这样子的,听我说。听我说他是这样子的,他把这一段功能封装起来。写成一个函数,怎么写呢?非常的简单。这样写来。就是说将。将计算计算的这个功能。功能。放到放到一个函数中。一个函数中。函数中。对不对,放到一个函数中,然后在需要的地方调用即可,然后然后在需要的时候再需要再。需要使用时。需要使用时调用即可。
08:01
调用即可,就这么简单。就这么简单来吧,那我写个函数,比如说function大,根据刚才讲的那个定义函数的规则啊,这是我们的关键字,必须这么写,然后呢,写个函数名叫calculator,比如说我就想开calculator,简写CAL,然后呢,这边我有参数。我在接收的时候,大家想是不是他这有两要输入两个数,还有个运算符啊,那简单了,那简单了没问题,我这样写。第一个呢,我先定义一个。定义一个参数,注意这个参数呢叫行参,刚才在这一个幻灯片里面也说了叫行参,行参在写的时候呢,是先写这一个。并行参的名称再写类型。FLOAT60,注意这个顺序,第二个呢,我们再接收一个值FLOAT60。第三个,我们还要接受一个操作服operator。
09:01
Operator这个没问题吧,Operator,那么它是个bit类型。这样看到我这里面就有三个形参,这个叫形参形式参数,那么我有返回值吗?我肯定是有返回值,因为我会计算一个结果吗?我把这个结果返回来FLOAT64。这个就叫返回值列表,因为只有一个,所以说我这边这个括号可以不写,当然你写上也没有问题,因为只有一个呢,所以说我就不写了,就代表我将来返回的是有一个叫我会返回一个FLOAT64的一个结果。好,这个这个地方只写一个什么,这地方可以只写一个,只可以只写一个类型就行了,好,写完。包起来。那么这里面的内容是不是咱们已经写过了呀?诶,朋友们请看我把这段代码。复制过来,包括上面这段代码也可以复制过来。看到了。整个复制一把,然后把这段代码整体放到这边来看。
10:03
大家感受到什么东西没有,那也就是说进来过后这段代码我已经把它放在函数里面去了,然后呢,这个2OPERATOR拿到过后,诶,它就加减乘除,最后把这个结果拿到,最后我们把这个结果返回,返回什么,你这不是把它算出来了吗?把这个res给我返回即可。代码写完了。这个就是一个最简单的一个函数,那么在用的时候怎么用呢?非常简单。这边基本不要了。他。卡卡了过后我我怎么用呢,大家看到这里。这不是有re吗?我把这个re给你直接返回啊,大家看我直接接收一下,比如说我这方用一个变量来接收,比如说这个my result计算结果我们叫result。等于哦,这样子我们相当于定一个变量了。对吧,等于什么呢?等于这边返回的卡。
11:02
把这个粘贴到这里来。然后我要传的是几个具体的值,第一个是N1。但你这样填,这样传也可以1.2。2.3注意听啊,同学们,然后再来一个减,这样写也可以,但这个结果呢?返回来是交给这个result这个变量了,所以说我把这个变量呢,也就换一下啊,而result变量名称我要统一嘛,你返回的是什么名称,我们就写什么名称,Result拿到了,这样写呢是可以的啊,这个就是我把一点二传给了。N1。待会儿我们再看这个图,就是它什么意思啊,我把这个再给大家看一下。什么意思,大家看一下。这样用法就代表什么意思呢?同学们看一下,就是相当于说。相当于说你这儿有一个1.2。这有一个2.3,这有一个减号,那么这个时候1.2就传给谁了呢?
12:05
传给这个N1了。理解2.32呢,就传给了这个N2。而我们这个减号这个符号就传给了operator。那这边就会拿到,拿到过他下面就可以使用了,明白意思吗?就可以,就相当于我把这具体的1.22.3减号就传给他了。OK,那传给他这个时候N1就会等于什么呢?就相当于说你可以理解成好像把1.2负给了N1。把这个2.3付给了N2,把这个减号付给了这里面的operator,这个operator拿到过,下面呢,就可以当做一个变量直接使用了,能理解不难吧,不难啊,这个一点都不难,然后呢,我们这样结果就完全可以了,但是这样写法呢,我们先看这样写法可不可以啊,这样写法可不可以,我把下面的代码先暂时注销了好不好,我把下面代码先暂注销,因为我不想让它来影响我们。好,整体我从这开始。
13:02
让他先不要执行。注销,注销过后,我们先来看看此时此刻我们这样一运行这个result能不能拿到正确的结果,好吧,这样子为了计算起来比较方便呢,我找一个比较容易统计出来的,比如3.2吧。啊,3.2就3.2减去二三,这个我们写一下啊,这个叫做。叫做叫做5.3。5.3。啊,5.3减去2.3这个九,那这个地方为什么会报错,大家想一想,是不是就是因为我没有用这几个变量啊,啊,我们先先用这个实际的参数给他传一下。我们先跑一下,看看结果。跑起来没有?我们发现result等于三正确。因为你5.3减2.3,但是这样写法肯定不合理,这个为什么不合理呢?就是因为你这样老是传一个具体的值很累,所以说完全可以把这里面的N1。写到这来,注意听啊,我在这样讲的过程是希望大家能够领会到怎么来的,一步一步怎么演变过来的,这边呢,就写上operator,就是你这边operator我复制过来。
14:09
能理解,那这个时候这个传的这个N1,就是这个一点二传的这个N2呢,就是2.3传的这个operator就是减一样的。OKOK,好,这是为为了好看呢,我把这变成加号,它变一下这样子相当于是相当于是什么?这是1.2,这是2.3,这是加号,那整个返回的结果应该是3.5,看对不对。没问题吧?3.5就OK了。结果3.5看到没有好,这个就成功了,那下面的代码你看有多方便了呢。各位同学想一想,这有多方便?诶,我想计算4.56.7信号,那这个就不要了。怎么做?一句话,Result等于什么?等刚才这个方法的一个调用完事。
15:02
对不对,但这个这个咱们这个不要不不能叫BAT啊,应该是还还用这个operator这个变量来做就行了。刚才我们这写错了啊。这样子不就完了吗?你看这个刚才那么大一段代码,用这一个就解决了。哎,是不是啊,你看同样我可以把这个结果再给大家打印出来。Format。LN,好,我们这时候result又得到一个新的结果,等于什么呢?诶把这个输出来。最少值来再跑一下,那就4.5乘6.7,看这个结果等于多少跑起来。跑起来。你看又拿到一个结果对吧。30多少?没问题,那下面代码是不是一样的呀,如果我再想计算是不是一样的道理,我就不写了好不好,你看这个时候有什么好处,你看诶代码变得比较的简单了,原先我们写很多代码,现在其实就是调用一下就可以了。那调用一下结果就结果就拿到了,这多方便,而且代码的维护性也会变得很好,为什么?如果我想增加一个取模的功能,那非常的简单,就开始。
16:11
Kiss,然后呢,我增加一个这样的东西,说模。如果他取的是按这种方式来的,那我们这个结果怎么返回呢?这样子res等于N1模N2完事,那这样一写的话,相当于说你在这个地方调用的时候,你就可以直接这样做了,是不是这个道理啊,我十个亿啊十个亿,所以大家看你下面看下面这个是不是也同样具有这个功能的,所以我维护性也非常的好。所以维护性也非常的好,能理解吗?好同学们,那这块呢,我们先撤回去啊撤回去,因为我们一般不去去摸,好同学们体会一下它的好处吧,体会一下它的好处,好我们这一个。基本函数的快速入门的案例我们就讲到这儿了,大家先体验体会一下,感受一下,如果说可以的话呢,自己写写代码,自己跑一跑,好,这是我们来了一个函数的快速入门,我们把代码放在笔记里面来,大家加深一个认识。
17:14
好,我把这段代码呢,完整的放到笔记里面去。其实就是这这个地方。我们写了一个函数。是不是这个意思?就是这写的函数。然后我们说了一下如何调用这个函数。还有一段如何调用?调用函数,我们的关键代码,我也拿一份。我就不全部结了啊。我就写这一部分怎么调用的呢,这样调用的。在没。函数里边我们这样调用,调用的时候是这样子的。对吧,这就是调用这个,我们把它称之为调用函数。调用函数OK,那调用的时候呢,就就会返回一个结果,我用result把这个结果接收到了。
18:03
把它放在我们的笔记里面去。Ready吧。同学们,那关于我们函数的一个基本的使用和快速的入入门呢,我们就说到这儿,那当然关于函数要讲解的东西还有很多啊,不是说讲这一点就完事了,还有函数的细节咱们的呃。咱们这个函数在使用时候有哪些陷阱对不对,包括我们的B包等等等等,还有好多内容,包括我们的匿名函数,Init函数,包括我可变参数等等,那就讲开多了,比如说这个行差。怎么写更合理?参数列表,返回值如果有多个怎么处理返回值有多个值怎么返回,怎么返回等等细节有很多了,但是不管怎么样,我们现在呢,可以这么说,就是你听完老师讲到这儿呢,你可以说,诶,我对函数有个基本的了解了,只是细节我们还没抠,对不对?所以说细节呢,等到下面就要开始来讲解,好关于函数基本介绍,我们先给大家聊到这里。
我来说两句