﻿1
00:00:04,440 --> 00:00:05,490
‫你好, 欢迎｡

2
00:00:05,490 --> 00:00:10,860
‫在这节课中, 我们将学习如何使用不同的返回类型和一个return语句,

3
00:00:10,860 --> 00:00:13,800
‫从函数中返回值｡

4
00:00:13,800 --> 00:00:16,260
‫让我们深入了解一下它是如何工作的｡

5
00:00:16,860 --> 00:00:26,040
‫上节课, 我们说过如果函数没有返回值, 那么返回类型应该是void, 这就是我们在这里所做的｡

6
00:00:26,040 --> 00:00:34,170
‫但是如果我们想用一个函数, 比如get, 来检查我们是否应该在if语句中, 把这个函数转过来,

7
00:00:34,500 --> 00:00:40,170
‫如果我们可以说should turn around,

8
00:00:40,170 --> 00:00:42,690
‫那么最终它会是一个更干净的函数｡

9
00:00:42,690 --> 00:00:44,520
‫那我们该怎么做呢？

10
00:00:44,520 --> 00:00:49,530
‫我们如何实现一个可以返回布尔表达式的函数？

11
00:00:50,040 --> 00:00:55,920
‫好吧, 我们做的方法是简单地使用一个类型而不是void｡

12
00:00:55,920 --> 00:01:03,660
‫所以如果我们想返回一个布尔表达式, 因为像变量一样输入bool｡

13
00:01:03,660 --> 00:01:08,130
‫但是函数和变量的区别在于, 我们在它后面加上了括号,

14
00:01:08,130 --> 00:01:10,440
‫这使得它是函数而不是变量｡

15
00:01:10,620 --> 00:01:18,510
‫我们要做的就是调用它, 如果平台返回, 然后用括号括起来｡

16
00:01:18,510 --> 00:01:24,420
‫在这个例子中, 我没有任何东西要作为参数传递给这个函数,

17
00:01:24,420 --> 00:01:31,620
‫所以我可以把参数列表留空, 在行尾放上分号, 然后复制这一整行, 然后转到移动平台｡

18
00:01:31,620 --> 00:01:37,140
‫在文件的最后你可以把它放在任何函数之间的任何地方｡

19
00:01:37,140 --> 00:01:39,690
‫只要确定它不在函式内即可｡

20
00:01:39,840 --> 00:01:41,160
‫我要把它贴在这里｡

21
00:01:41,160 --> 00:01:46,170
‫我将缩进它并添加类和｡

22
00:01:46,850 --> 00:01:48,380
‫作用域解析操作｡

23
00:01:48,380 --> 00:01:56,900
‫所以一个移动的平台冒号冒号应该平台回车, 然后去掉分号, 加一些大括号代替｡

24
00:01:57,500 --> 00:02:04,160
‫这里我们要做的是, 如果我们想让它返回一个结果, 我们需要使用一个特殊的关键字return,

25
00:02:04,160 --> 00:02:10,100
‫后面跟一个正确类型的表达式｡

26
00:02:10,100 --> 00:02:19,100
‫所以在这个例子中它必须是一个布尔表达式所以我可以返回true然后在末尾加上分号, 或者我可以返回false然后在末尾加上分号｡

27
00:02:19,580 --> 00:02:21,380
‫但事情并不一定要这么简单｡

28
00:02:21,380 --> 00:02:23,750
‫它实际上可以是任何表达式｡

29
00:02:23,750 --> 00:02:29,000
‫它可能是对函数的另一个调用, 可能是变量, 也可能是一些运算符的使用,

30
00:02:29,000 --> 00:02:31,790
‫就像我们在语句中使用的那样｡

31
00:02:32,000 --> 00:02:34,820
‫所以, 事实上, 让我们来试试看｡

32
00:02:34,820 --> 00:02:36,800
‫我来看看这个表达式｡

33
00:02:36,800 --> 00:02:41,330
‫移动的距离和is大于mov距离｡

34
00:02:41,330 --> 00:02:50,180
‫我把它切下来, 然后把它作为平台返回函数的返回表达式.

35
00:02:50,540 --> 00:02:56,210
‫你会注意到它会在这里抱怨, 因为distance move在should

36
00:02:56,210 --> 00:02:58,220
‫platform返回函数中不是一个局部变量｡

37
00:02:58,520 --> 00:03:00,290
‫所以我们得再搬些东西过来｡

38
00:03:00,290 --> 00:03:06,830
‫但在此之前, 我不想忘记在if语句中调用, should

39
00:03:06,830 --> 00:03:14,900
‫platform return, 然后记得加上括号, 这样函数就可以在F语句中调用了.

40
00:03:14,900 --> 00:03:17,180
‫所以现在我开始觉得好一点了｡

41
00:03:17,180 --> 00:03:21,410
‫如果平台应该返回, 那么我们将执行以下所有操作｡

42
00:03:22,100 --> 00:03:29,600
‫现在我们要做的就是把我们在MOVE平台中得到的, 移动的距离变量｡

43
00:03:29,600 --> 00:03:31,400
‫在MOVE平台中, 我们实际上并不需要它｡

44
00:03:31,400 --> 00:03:35,990
‫我会把它剪下来, 在我返回语句之前, 把它放在线上｡

45
00:03:35,990 --> 00:03:45,590
‫通常return语句是函数中的最后一个语句因为一旦你从函数中返回, 你就不会再做其他的事情了.

46
00:03:45,590 --> 00:03:55,010
‫如果我写了一个日志消息, 我会在return语句后面写一个日志消息.

47
00:03:55,430 --> 00:04:01,790
‫通常情况下, 编译器会警告你, 这一行永远不会到达,

48
00:04:01,790 --> 00:04:05,480
‫你可能不是故意的.

49
00:04:05,780 --> 00:04:08,930
‫所以return语句通常是最后一个｡

50
00:04:09,590 --> 00:04:16,820
‫在should platform return函数中, 移动到定义移动距离的那一行之后,

51
00:04:16,820 --> 00:04:22,520
‫你可以看到, 我没有当前位置,

52
00:04:22,520 --> 00:04:28,610
‫我们可以很容易地获取当前位置, 我们已经在调用should platform return之前设置了当前位置.

53
00:04:28,610 --> 00:04:32,330
‫所以实际上获得主动位置正是我们想要的｡

54
00:04:32,330 --> 00:04:42,200
‫所以我只需要把它放在一个变量中, 我只需要调用一个函数来获取这个位置的活动位置, 然后平台返回.

55
00:04:42,200 --> 00:04:50,480
‫所以现在我们得到的是移动的距离等于起始位置和获取活动当前位置之间的距离｡

56
00:04:50,810 --> 00:04:56,000
‫因此, 如果该距离大于配置的移动距离, 则是, 平台应返回｡

57
00:04:56,000 --> 00:05:03,890
‫这就是这个函数的含义, 它允许我们在MOVE平台函数中以更高的抽象级别使用它｡

58
00:05:04,190 --> 00:05:09,590
‫现在你会注意到, 它现在抱怨说, 我们不能让距离移动打印出过冲｡

59
00:05:09,590 --> 00:05:10,970
‫这没什么大不了的

60
00:05:11,000 --> 00:05:13,760
‫我真的不想再发表了｡

61
00:05:13,760 --> 00:05:15,470
‫反正我的功能也被打乱了｡

62
00:05:15,470 --> 00:05:18,200
‫所以我打算删除超调变量行｡

63
00:05:18,200 --> 00:05:23,390
‫我将删除获取名称行, 我将删除日志消息, 因为它只是暂时存在,

64
00:05:23,390 --> 00:05:26,900
‫因此使用了日志临时名称｡

65
00:05:27,290 --> 00:05:32,210
‫所以现在我们的移动平台功能看起来要干净得多｡

66
00:05:32,210 --> 00:05:35,480
‫我们可以看到, 我们正在对此处的位置进行一些更新｡

67
00:05:35,480 --> 00:05:38,480
‫我们可以看到平台是否应该返回, 如果它应该｡

68
00:05:38,480 --> 00:05:41,660
‫然后, 我们更新位置并将其翻转｡

69
00:05:41,660 --> 00:05:51,230
‫现在我认为这里看起来会更好一点的是如果我们有一个alt语句, 而不是在顶部有一堆代码｡

70
00:05:51,230 --> 00:05:59,570
‫因此, 如果平台返回, 我们将执行此代码, 否则我们将执行正常代码, 以便将其向前移动｡

71
00:05:59,570 --> 00:06:03,860
‫请记住, 我们曾讨论过alt语句｡

72
00:06:03,890 --> 00:06:07,610
‫它就在if语句之后, 我们就这样做.

73
00:06:07,610 --> 00:06:12,800
‫在大括号后面, 我们有一个新的行, 输入else, 然后另一个新的行,

74
00:06:12,800 --> 00:06:17,120
‫打开一些新的括号, 我们可以把这个代码移到刻度的顶部｡

75
00:06:17,120 --> 00:06:20,510
‫我们可以把它移到alt语句中｡

76
00:06:20,510 --> 00:06:22,850
‫所以现在看起来很简单｡

77
00:06:22,850 --> 00:06:26,900
‫平台是否应该返回, 然后执行平台返回else的代码？

78
00:06:26,900 --> 00:06:30,740
‫我们以平台速度向前移动平台｡

79
00:06:30,740 --> 00:06:35,030
‫现在我想挑战你自己创建一个返回值的函数｡

80
00:06:35,030 --> 00:06:38,060
‫我想让你添加一个移动距离函数｡

81
00:06:38,060 --> 00:06:41,990
‫所以我们现在把它计算成一个变量, 叫做移动距离｡

82
00:06:42,020 --> 00:06:45,860
‫我希望你用一个函数调用来代替它｡

83
00:06:46,310 --> 00:06:54,410
‫所以它应该返回一个浮点数, 因为这是移动距离的类型, 如果平台返回, 我们应该调用它.

84
00:06:54,410 --> 00:06:59,000
‫因此, 我们应该使用自己的实现, 而不是使用vector dist｡

85
00:06:59,000 --> 00:07:02,000
‫那么我们应该包含什么代码呢？

86
00:07:02,000 --> 00:07:04,190
‫我们应该用什么样的代码来输入呢？

87
00:07:04,220 --> 00:07:09,680
‫提示是我们已经输入了这段代码, 所以您只需将其复制并粘贴到新函数中｡

88
00:07:09,680 --> 00:07:17,390
‫但是我们需要考虑一下返回表达式应该是什么, 这样我们返回的就是移动的距离值｡

89
00:07:17,420 --> 00:07:19,220
‫暂停视频, 开始体验｡

90
00:07:22,950 --> 00:07:23,850
‫欢迎回来｡

91
00:07:24,150 --> 00:07:26,150
‫让我们来看看我们的文件头｡

92
00:07:26,160 --> 00:07:33,330
‫我们将在这里添加一个新函数, 它带有一个名为get distance moved的浮点返回值｡

93
00:07:33,330 --> 00:07:36,240
‫然后括号里就没有参数了｡

94
00:07:36,420 --> 00:07:39,150
‫然后我们要去移动平台｡

95
00:07:39,150 --> 00:07:51,600
‫我们要加上一个浮点数, 一个移动平台, 冒号, 冒号, distance moved或者get distance moved,

96
00:07:51,600 --> 00:07:53,550
‫我应该说是括号｡

97
00:07:53,550 --> 00:07:58,020
‫然后我们在下一行放一组新的大括号｡

98
00:07:58,410 --> 00:08:07,950
‫我们要返回的就是我们用来创建距离移动浮动的表达式, 这样我就可以把它剪下来粘贴到这里｡

99
00:08:07,950 --> 00:08:14,280
‫所以它是f vector, 冒号, 冒号, dist, 起始位置, 获取活动位置,

100
00:08:14,280 --> 00:08:15,240
‫在行尾放分号.

101
00:08:15,390 --> 00:08:17,610
‫而这意味着在应平台回归｡

102
00:08:17,610 --> 00:08:22,560
‫现在, 我不再把这个距离移动为变量, 而是删除那条完成一半的线｡

103
00:08:22,950 --> 00:08:27,630
‫我们要返回得到的距离移动｡

104
00:08:28,080 --> 00:08:31,890
‫括号大于移动距离｡

105
00:08:31,890 --> 00:08:39,660
‫所以我们取了一个变量的内容, 然后把它拉到它自己的函数里.

106
00:08:39,660 --> 00:08:45,180
‫这就意味着,

107
00:08:45,180 --> 00:08:53,880
‫每当我们想引用移动的距离时, 如果我们确实想在MOVE平台中保存日志消息, 那么我们可以很容易地调用函数, 从我们类中的任何函数中获取移动的距离｡

108
00:08:53,880 --> 00:08:54,450
‫好东西｡

109
00:08:54,450 --> 00:09:03,120
‫在这节课中, 我们学习了return语句和返回值, 我们在课堂上用它们创建了两个新函数.

110
00:09:03,120 --> 00:09:04,590
‫我们下节课再见｡

