深入了解方法(一)

在前一章,你学习到了变量作用域——变量的存在和允许调用范围。这个作用域会被一对儿尖括号包裹住。这个尖括号的作用是将你的一段代码a block of executable code包裹起来使其变成一个代码段。在第二章的时候,你看到了方法就是一个代码段并且可以只通过方法名就可以调用。现在是时候来认清代码段和其中的变量的重要性了。实际上方法就是一段用尖括号包裹起来的代码段。

在本章节,我们将会了解方法的几个特征

  • 用尖括号来结束方法
  • 在代码中使用方法
  • 正确地命名方法
  • 调用方法
  • 在方法中产生返回值
  • 使用Unity中的Update()Start()方法

变量是C#中最主要的一块基石,方法其次,那么就让我们来了解方法。

使用尖括号来结束一个方法

在第三章的开始,你了解到了C#语句和使用分号来结束C#语句。那么方法会有一下不同的要求。

一个方法会像代码段一样被一对儿尖括号包裹。所以,不要使用分号来结束方法。

如果你偶然地使用了分号来结尾,Monodevelop会很乐意为你指出这个错误,告诉你不应该使用分号来作为方法的结尾。

在代码中使用方法

在代码中使用方法有两个原因:

  • 为你的游戏对象提供行为。
  • 使你的代码可以复用。

所有代码文件中的可执行代码均是方法。

方法的第一个工作目标就是来协同类中的成员变量。成员变量会存储组件所必须的数据来为游戏对象提供行为。所有你写代码的原因就是为了让你的游戏对象可以做一些有趣的事情。我们在方法中写的代码就是要让这些行为变成现实。

正确命名方法

永远为你的方法起一个有意义的名字。就像我解释变量那样,如果你不这么做,不出六个月……呃……你懂得。

为了让你方法可以使游戏对象变得有用,你需要给你的方法命名,就想告诉它“行动”一样。比如,跳过栅栏或者爬墙。当你看到方法名的时候你就会知道它将要干什么。

不要起太简略的名字,假设你起了一个叫Wiggle的名字。当然你现在知道Wiggle是什么意思(摇),但是六个月后你可能就会想“摇?摇什么?摇个J……”,命名只会消耗你一丁点的时间把它写的更加明了比如WiggleMyButt。那么,当你再看到这个方法的时候,你就会立马知道它的作用了。

用大写字母来为方法命名

为什么要这么做?我们需要用这个方式来将变量和类与方法区分。并且,微软也建议用大写字母来作为方法名的开头。如果其他的人来读你的代码时,他们可能会想到看到大写字母开头的方法名

用多个单词来为方法命名

让我们再用一次这个例子

void AddTwoNumbers () { // Code goes here }

你可以看到,方法名是由三个单词组成的。当你开始写方法名的第一个单词时,你需要将它的首字母大写,后面的单词也一样。比如,PascalCasing。

圆括号是方法名的一部分

方法名经常会以圆括号作为结尾。他并不只是为了告诉你这是一个方法,它也会在你需要向方法内储存数据的时候起到关键的作用。

正确地定义一个方法

就像变量一样,我们需要在使用之前先让Unity了解到这个方法。

这取决于你在跟谁对话,有些人会说声明一个方法,另一些人会说定义一个方法。哪个是正确的呢?在C#中,这没有什么不同,挑一个让你容易理解的说法就好。我更喜欢说我定义一个方法,这样可以和我在语句中声明一个简单变量区分开。

定义方法所需要的必要元素

在你定义方法时候,你至少要遵循以下几点:

  • 信息或数据的类别,方法会在你调用的时候将他们返回回来。
  • 一个由圆括号结尾的方法名。
  • 一对儿像下面一样的尖括号:

returnDataType NameOfTheMethod ( ) { }

让我们再回到LearningScript中,或者一些Unity中原生的代码文件,Start()方法就拥有这些基本元素:

void Start () { }

那么我们得到了这些:

  • 第一个要素是 信息或数据的类别,方法会在你调用的时候将他们返回回来。这个方法不会返回任何值,所以为了代替你需要生命的数据类型,这里使用了void。这就会告诉Unity这里不会返回任何值。
  • 第二个要素就是方法的名称Start()
  • 最后一个要素就是尖括号,他会将方法内的行为包裹起来。

这个例子展现了方法所需要的最低要素。然而就像你看到的那样,方法中没有任何的代码,但是它仍然是一个方法。当然如果你不想使用Unity为你生成的这些基本方法,你可以删除他们。当你写完代码的时候,你也会将不会用到的代码删除掉,这是很常见的。

那么,当我们使用最低限度要素来定义方法时,Unity会这么解析:

  • 没有public修饰符的时候,就意味着默认是private。所以,这个方法不会被其他的代码文件调用。
  • 代码段中没有代码,意味着这个方法不会做任何事,如果我们愿意完全可以把它删掉。

了解圆括号——为什么他们要在那里?

首先一点,它们会让我们更加清晰地知道那是一个方法,但是为什么他是方法名的一部分呢?

我们已经知道,方法是一个可以复用的代码段。这就是我们需要定义方法的一个原因,不需要再一遍一遍地写相同的代码。回想第二章中的AddTwoNumbers()方法。它是我们来解释方法调用的最简单的例子。所以,是时候来了解圆括号的作用了。

动手时间——在圆括号内书写代码

我们需要去修改LearningScript并向AddTwoNumbers()方法内传入信息,以使得它更加有用。

为什么我们要向方法内传递信息呢?

代码可能需要重复地做相加操作,但很可能不会每次都使用相同的一对儿数字。我们也许有100多种需要相加的数字。这意味着我们需要让方法知道在我们调用它时我们需要相加的数字。

LearningScript

使用上图之前,先做以下几步:

  1. 在Monodevelop中打开LearningScript准备编辑。
  2. 在6、7、8行声明整型变量。
  3. 在22-26行之间,定义具有参数的AddTwoNumbers()方法。
  4. 在12、13、14行调用AddTwoNumbers()方法。
  5. 保存
  6. 点击Play

发生了什么?

在代码执行的时候,AddTwoNumbers()方法被执行了三次。方法中的代码段将他们相加并输出在了Unity的Console中(观察下图中的黄箭头)。

Console

这些圆括号就像个小房间。当我们调用AddTwoNumbers(),一对儿数字就会进入这个小房间。当代码段执行的时候,他们就会将小房间内的这对儿数字取出来并且在24行使用它们。

具体声明方法的参数

当你去字典里查参数的意思时,你估计又要头疼了。这其实只是意味着方法需要使用你给它的一些信息来执行,所以你需要具体说明这些参数的数据类型。就是这样了,很简单。

在前面那个截图中,22行红箭头标注出了两个变量firstNumbersecondNumber。数据类型是int,或者说integer。那么再看一下红箭头标注的三个变量,number1number2number3,他们也是int类型。当我们向方法提供数字的时候,他们的类型也必须是int,就像我们声明的那样。

所以让我们再回到字典。你可能会看到条件这个词。这也就是你声明参数类型的时候所做的一样,方法必须使用这个类型的参数,也就是你给它加了一些限制条件。

好的,所以你为方法添加了一些参数,限制条件,数据类型,但是参数究竟是什么?好吧,第一个参数是firstNumber,那么它会做什么?他会存储我们将要在24行使用的数据。我们叫这些存储数据的东西什么呢?就是变量。变量无处不在

记住,变量名只是他所存储的数据的替代品

就像你在22行看到的那样,两数相加了。

方法可以含有多少个参数?

你可以尽可能地向方法提供参数。不过无论是在我们写方法,或者使用其他的方法时,我们只需要向他提供能保证它运行的参数就好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容