小游戏极速入门教程(二)基础知识II

在上一篇教程中,我们讨论了变量。在本篇教程中,我们将讨论新的概念“方法”和“作用域”。

在编写程序的时候,我们都会尽量避免去重复地写代码。试想一下老师让我们回答问题时的场景。例如,老师把睡的迷迷糊糊的小明喊起来,问他“30+50等于多少”?小明回答“80”。然后老师又问,“那100+20呢?”,小明回答120。你是不是发现了,老师只是负责提出问题,而我们只需要告诉老师结果。在这个过程中,老师根本不管你脑子里是怎么计算的,只要你告诉他的结果是正确的就可以了。

这个过程,就是我们今天所说到的“方法”。我们自己就是老师,而在程序里编写的“方法”就是学生。来看下面的代码。

functionjiafa(a:number,b:number):number

{

varc:number = a+b;

returnc;

}

如同使用var来声明一个变量一样,我们通过function来声明一个方法(有的文章里会直译为“函数”,中国台湾同胞则称之为“函式”)。因此function jiafa即表示我们需要声明一个名字为jiafa的方法。方法名后面的括号,如上面代码的(a:number,b:number)部分。是用来说明这个方法运行时需要提供的参数的。像我们上面所举的例子,老师询问学生加法的结果,就是一个需要带参数的例子,因为老师必须要提供需要我们计算的两个数字,我们才能给出结果。而有一些情况,是不需要参数的。例如,老师问你“你是203班的吗?”,你只需要回答是或者不是就可以了,老师不需要给你附带任何条件。在这种情况下,这对用来说明参数的括号里就不用写任何内容,所以函数的声明方式会变成function jiafa()。

当然,我们还是要回到我们现在的例子上来。我们现在知道了这个方法需要两个参数,a和b,并且根据第一次教程的知识,我们知道a和b还都必须是数字型的。而这个方法的作用是什么呢?是告诉我们a和b相加的和。我们称之为方法的“返回结果”。在声明参数的括号后面,跟随的:number,就是用来说明方法的返回类型的。

因此,我们现在通过第一行代码,声明了一个名字为jiafa的方法,这个方法在使用的时候,需要提供两个数字型的参数,而这个方法会给我们返回一个数字型的数值。

接下来,就是方法的实际内容了。这个部分是封闭的,如同老师问我们问题的时候,完全不用管我们的大脑是怎么计算的。我们的大脑是独立且封闭的。在编程的世界中,我们通过一对大括号来做到这一点。你可以看到在第二行和最后一行,有一对大括号把中间的内容包裹了起来。

请一定记住这个概念,在函数名定义后面的大括号,分割出了一块独立的空间。

接下来,在括号里的内容我们在第一篇教程中已经接触过了。我们声明了一个数字型的变量c,它的值是a和b的和。

然后,我们接触到了一个新的关键字,return,英文直译为返回。这个就是我们前面所说的返回操作了。可以看到,我们把c返回了回去。使得这个方法功能得到了实现——我们拿到了a和b,然后计算了a和b的结果,并且返回了回来。

那么,方法究竟给我们带来了怎么样的编程改变呢?来看下面的代码:

varn1:number = jiafa(10+20);

varn2:number = jiafa(20+30);

varn3:number = jiafa(45692+234567);

明白了吗?现在我们再计算加法,只需要反复使用我们已经写好的方法就可以了。而当我们发生任何功能变化的时候,比如我们需要让加法的结果不超过100,那么只需要改动方法的内容,那么所有使用这个方法的位置就都发生了计算结果的变化。

另外请注意,我们编写的代码,都是从上到下运行的,刚才的代码完整看下来应该是这样的:

functionjiafa(a:number,b:number):number

{

varc:number = a+b;

returnc;

}

varn1:number = jiafa(10+20);

varn2:number = jiafa(20+30);

varn3:number = jiafa(45692+234567);

程序“自顶向下”运行(至少现在学到的是这样的),首先定义了方法jiafa,然后去使用这个方法。想想看,如果把使用方法的代码挪到前面会怎么样呢?那个时候,程序根本不知道jiafa是个什么鬼,因此就会报错啦:)

你可以动手写一个方法来实现两个数字的乘法或者除法,或者写一些更复杂的计算方法。

作用域

接下来,我们讨论一个新的概念,“作用域”。啥是作用域?你可以把他理解为所有权。比如,你口袋里有50块,我可以直接花吗?显然不行,因为这个钱不是我的。我如何能花这个钱?必须通过你,你要把钱给我,我才能花。对吧?

在编程的世界里,我们通过作用域来决定一个方法或变量的归属。再来看我们刚才写的代码:

functionjiafa(a:number,b:number):number

{

varc:number = a+b;

returnc;

}

我们在jiafa这个方法内,定义了一个变量c,刚刚我们还特意强调过,我们通过大括号划出了一个独立的空间。而c这个变量刚好在空间内。因此,c的作用域就限定在了方法jiafa内。如果jiafa是你,那么c就是你口袋里的钱。他变多还是变少,除了你之外,别人是不能决定的。而对于程序世界里的c而言,就只能在jiafa这个方法的内部使用,外部是无法调用到的。你可以这样试一下:

functionjiafa(a:number,b:number):number

{

varc:number = a+b;

returnc;

}

trace(c);

我们在方法之外打印一下c,你会发现是一个无效的值"undefined"。因为在jiafa外,根本没有定义过c这个变量。

再来看一个例子:

var n:number = 50;

function jiafa(a:number,b:number):number

{

var c:number = a+b;

trace(n)

return c;

}

你觉得运行结果是什么?是的,结果会输出50。如同你口袋的钱和大街上掉的一堆钱。你可以去捡,别人也可以去捡。n是声明在方法之外的,因此,在方法内部可以使用它。而c声明在方法之内,外面却不能访问。

因此,我们在编程的时候,尽量不要让外面的变量名和内部的变量名一样,否则自己都会被搞晕的。

第二篇教程就先到这里。下一篇教程,我们将会接触到逻辑判断。希望你的编程之旅愉快:)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727G0YN9Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券