00:00
各位,那关于我们就是勾浪里面的流程控制这块内容呢,我们就全部给大家介绍完了,下边呢,我们接着为大家讲解勾浪里面的函数包和错误处理,好,我先把这个关掉,我们打开新的章节。打开我们的课件里面的函数包和错误处理这个章节。下面呢,我们就来讲函数,各位函数,函数是我们这里面特别重要的啊,就是函数也是我们编程语言里面特别重要的一个概念。特别重要一个概念,而且呢,这里面就开始有模块化编程的思想了。那么我们来看一下函数是什么。就是勾里面的函数,首先呢,还是老规矩,还是老规矩,就是为了让大家听的比较轻松一点呢,我们还是有一个问题引出,我们为什么需要使用到函数,尤其是对我们零基础的同学来说呢,应该是特别重要的,就说我们学任何一个知识点或者一个新的技术,我在前面已经阐述过这个观点,他一定是因为。
01:10
你用的要讲的这个新东西,对以前是一个有一个有有一个改进,或者说能够让他效率提升,或者是让他在使用形式上有一个优化,是不是它总是有个原因的,那么我们就来看一个需求引出我们要讲的函数。请大家完成这样一个需求,输入两个数,再输入一个运算符,得到一个结果,就是我要求大家写一段代码来统来计算什么呢?来计算两个数的可能是,可这这两个数的加减乘除OK,但是呢,它的计算结果应该跟它的运算符是有关系的。同学们想,如果这段代码让大家来完成,你能够完成吗?大家想想。就是我让你们来完成这一个功能,你们能不能做做出来。
02:00
同学们想肯定你们是能做出来的,为什么呢?因为我们前面的两个数的加减乘除我们是学过的,而且呢,我们还学过判断语句和Switch语句,对不对,这是完全可以做成的,所以说有了这个需求,我们先不去管函数,还是我们我们不先去,先去不要去管其他东西,我们就用传统的方式来解决,然后我们我们看一看用我们现有的技术解决会出现什么问题,OK,好,来吧,我们先引出这个问题。然后我们开始往里面深入的探讨,打开我们的笔记,这里呢,就是我们新的一个章节,叫函数。给他一个标题,我们这是第六章对不对,给他一个标题第六章,第六章呢,我们先说的是为什么需要函数。这个话题看起来呃,好像很简单,其实非常重要,对不对,为什么呢?因为我们只有知道为什么要学它,我们才会学的很好。大家先看这个需求,需求我已经把它列出来了。
03:04
再看代码吧。OK,没问题,现在呢,我们使用传统的方法来解决,这是给大家看的一个需求。没问题吧,现在使用。使用传统的方法。传统的方法解决。好,这个地方我还是换一个标题,不用这个用标题三啊,标题三使用传统的方法解决难不难呢?其实一点都不难,我们写段代码来体验一下。来走代码啊,我直接走代码。因为并不难嘛,我们打开Vs code,我们新建一个CHAPTER6。Chopa Liu。OK,新建一个文件夹,Chapter。CHAPTER606。是这个吧。CHAPTER06没写错,然后呢,我们新建一个,再再写一个文件夹,叫做函数的function。
04:04
DEMO。这是我们的第一个,好吧,然后在这里面呢,我们写一个文件main.go。好老规矩,来一个package。你然后然后引入我们的包包。然后呢,我们写一个main函数。写完了我们要做的事情,其实非常的简单,就是按照这边的需求呢,他说完成这么一个事情难吗?其实不难,对不对,要我们完成的话,其实很轻松就完成来我们写段代码,嗯,分析一下这个这个要求吧,分析一下这个要求,他说输入两个数,再输入一个运算符,其实就应就应该有三个变量了,这里我就不从控制台输入了啊,我就直接定义三个变量。我这不写分析思路啊,分析思路我就不写了,因为很简单,我定义三个变量,比如说第一个变量。
05:01
是N1这个值,那么我定成FLOAT64。OK,第二个VRN2。好,也定成float流失。那么还有一个预算符,因为预算符呢,可能是加减乘除,因为它在输入的时候可能是加减乘除不知道,所以说呢,我们再定一个变量,比如说我这里呢,就用一个这样的东西,比如说叫做oper。Operator operator operator这个单词就是操作符的意思,能理解吧,好,这个时候呢,我们用个bit,因为我们可以用字符来表示,对不对,加减乘除嘛,这个没问题。好,现在呢,嗯,因为这些操作符到底是什么我不知道,所以说呢,我用Switch来进行判断。大家跟上老师的思路,Switch Switch,然后我们有个operator。Operator,好,现在开始了case,如果它输入的是加号。对不对,它如果是加号。
06:02
那么我们就把这两个数可以算出来了,那我再用一个变量来表示结果,这个没问题吧,N3 N3的话呢,我们也用float。六四啊,当然最后最好,这个名字我们不叫N3,叫res,就是result result结果的意思,这样子就看起来更清清更清楚一点,等于什么呢?N1加N2没问题吧,Case。Case,如果它是减就输的,它是个减的运算符,我们就等于什么呢?N1减N2。其他以此类推,同学们我就复制粘贴了,比较简单。那如果说它输输入的是乘号,那就是乘法,如果。它输入的是除号,我们就对两个数进行相除。否则的话,如果这个运算符不对,我们default一下,Default给他提示一个信息,就是你的输入有误,就是运算符有错,对不对。
07:05
我一下。Printtn就是输入有误或者操作符有误。操作符号错误没法计算,那整个这个Switch走完以后,其实这个结果是不是就已经拿到了呀,是不是就拿到了,这个没问题吧,我们把它输出来。那么我写一个res等于多少呢?就是re。没问题吧,好,同学们,这个代码就已经写完了。没,没有什么难度,那么我们来用一用,我们来用一用,假设我给N1赋了一个值,赋了一个值,比如说呃,假设它是1.2。假设啊,但当然这个地方按照我们这个设计,应该是从终端输入,因为我这地方终端输入大家都会了嘛,所以我就省点事,我就直接负了一个值,比如这是2.3,这个BAT呢,我给它一个,比如说是加没问题吧,最后这个结果不给值,因为它后面算出来好,那么现在呢,代码写完我们可以来运行一把。
08:04
我们来看看能否跑起来点点上一级,我们点点上一级CD到CHAPTER06。没毛病吧,然后CD到我们刚才写的这个叫function DEMO,然后go wrong幂函数跑起来。我们看效果。现在呢,他说结果是3.5完全正确,为什么呢?因为我这是加号吗?1.2加2.5没问题,好假设呢,我把它改成这个减法。好,减法这这个地方是1.2减2.3,看结果是多少。是吧,是这个结果吧,是这个结果,当然你后面还可以想一些办法把它进行一个格式化输出,比如说我就想保留到小数点多少位,也可以这样处理啊,这样也是可以处理的,后面再说好,不管怎么样,这个结果已经做出来了,是正确的。而且的确是比较简单。那有些同学说老师这个完成就完成了呗,完成就完成了呗,这个很简单呀,没问题,是这样子的啊,我们先把这个把代码写出去,然后呢,我就要分析一下。
09:09
传统的方法解决有什么缺陷?因为它有缺点,所以说才引出我们使用函数的必要性。能理解好同学们,我先把这个解决方法给同学们放到笔记里面来,不难啊,代码其实并不难。代码其实并不难,你只要前面都把我们基础听听了的都能做出来。我把这段代码呢,先放在我们的笔记里面去。OK。三好。那现在呢,现在我们拿到这个东西过后,我们就要开始分析了,诶说老师你这个上面代码的问题是在哪里呢。上面代码的问题是在哪里呢?OK,我们来分析一下上面代码,我们分析一下上面代码的这个问题。来吧。分析一下,我们先指出问题,嗯,首先我们问大家一个问题,这段代码写完了以后,你敢不敢保证你敢不,你敢不敢保证我们没在别的位置。
10:13
就没有这个需求了,也就是说假如我们写到这个地方,好,下面我们写了很多代码啊,假设我写了很多代码,假设我写了很多很多代码,这边假设我有,我有我有N多代码在这边写了。因为这个main函数,呃。他不是说到这就执行完毕了吗?他可能下面还有很多代码,就是有可能的,对不对,他有很多其他的代码,诶,当他写到这的时候,他突然又有一个需求。他又有需求了,有什么需求呢?他说我还要计算两棵数,我还想计算两个数的这个,呃,乘法。我要计算两个数,比如说我又有这个需求,我让又让你输入两个数,两个数啊,然后计算。计算它的这个,比如说加法或者是除法,或者是乘法,或者是这个减法的值怎么办?
11:07
比如说这两个数呢,是N1和N2啊,就是NUMBER1和NUMBER2。NUMBER1。Number。Number好怎么办?那当然有同学说了,好吧好吧,你不是NUMBER1和NUMBER2吗?你定义一个NUMBER1。Float。FLOAT64。对不对,你比如说这个值假设4.5,然后呢,怎么样,你又一个NUMBER2。对不对,好NUMBER2,然后呢,这个NUMBER2假设是6.7,然后你要求它的加减乘除,有可能加减乘除好吧,你把这个值。你把这个bed这个词。给我拿过来重新付一下。对不对,说假设这个地方,我想求它的两个数的乘法了,你给它附一个乘,然后怎么办,把这一串代码。
12:02
是不是复制一下。把这段代码复制,复制下来。好,复制下来过后,这个结果不就可以重新统计出来了吗?可以啊,那这个时候你肯定要把它代码改了吗?或者说或者这样说说老师我再聪明一点,N1和N2本身这个变量值呢,是什么并不重要,我直接这样写。我就不要这个N1N2NUMBER1NUMBER,我就直接NUMBER1。这边写着NUMBER2。这边显示number。啊,BAT我重新附一下值,让他重新算一下这个值不就得到了吗?没错,这样思想确实是可以的。确实也也是OK的,但是大家有没有发现我们这一段代码。相同的这段代码。已经出现过。两次了。两次了,好,等到你再往下面走,他突然又有一个需求了,他又要求两个数的加减乘除的方法,是不是你又把这段代码再重新给我复制一遍。
13:01
是不是又得复制一遍啊?诶,问题就已经出现了,同学们。你想这段代码在我们程序里面就有一种可能性,就是会多次出现。那么我们就会出现什么问题呢?就说这地方就导致我们的代码可能会出现冗余,同时不利于我们代码的维护,能理解这个意思了吗?就是这个意思。其实我们这种方式就会出现代码的冗余,同时呢,我们代码维护也不好。你比如说我要加一个功能,减一个功能,你比如说我这个Switch,我要加一个,比如说就是加减乘除,我突然想加一个,求什么呢?求它两个数的最大值。比如给我两个数,我,我要求两个数最大值,或者有别的运算符。比如球魔。求两个数的模,那你求两个数的模是不是你你可以在这给我。加一个,如果他求输的是曲模符号,你这结果我加一下好,你这加了过后,你这加了过后是不是意味着下面也都通通要加。
14:07
你代码维护性是不是也不好,所有同学们,我们已经找出他的问题所在了,什么问题呢?同学们看,根据前面分析,我们已经发现问题在哪里呢?第一个。第一个问题。第一个问题,上面的写法首先已经完成功能了,上面的写法。上面。上面。的写法是可以完成功能的,这个是给他一个肯定。但是呢,但是代码代码会可能会出现容易啊,或者容易容易出现冗余,但是代码冗余可能冗余,因为在别的地方你会反复复制,第二个呢,同时也不利于同时。不利于,不利于代码的维护,比如说我要增减一个功能也很麻烦。对吧,所以说这样一个问题,就导致我们不能够这样去写。
15:04
不能够这样去学,那怎么办呢?好,同学们,我们要引出的一段东西就出来了,就是函数。函数可以解决这个问题。函数就可以解决这个问题,其实函数呢,就体现出模块化编程了。好,这就是我们对上面代码的一个分析,第一个代码可能冗余,第二个呢,不利于代码维护,解决方法函数可以搞定,这就是我们通过这样一个分析,我们就解决了为什么需要函数,或者需要一个新的一种方法来解决我们这种需求的一种。一种需要。OK,好,那关于函数为什么需要我们先。引出到这里,下面呢,我们就开始具体的讲函数怎么解决这个问题,能理解,OK,我先把这块呢给大家录制到这里。
我来说两句