﻿1
00:00:04,440 --> 00:00:05,490
‫こんにちは､ ようこそ｡

2
00:00:05,490 --> 00:00:13,800
‫この講義では､ さまざまな戻り値の型と return 文を使用して､ 関数から値を返す方法について見ていきます｡

3
00:00:13,800 --> 00:00:16,260
‫さっそく､ この仕組みを見てみましょう｡

4
00:00:16,860 --> 00:00:26,040
‫さて､ 前回の講義では､ 関数が値を返さない場合は､ 戻り値の型をvoidにすべきであると述べました｡

5
00:00:26,040 --> 00:00:34,170
‫しかし､ getのような関数は､ 基本的にif文の中でこの関数を回すべきかどうかをチェックするものですが､

6
00:00:34,500 --> 00:00:42,690
‫代わりにshould turn aroundと言えば､ 最終的にもっとすっきりした関数になりますね｡

7
00:00:42,690 --> 00:00:44,520
‫では､ どうすればいいのか｡

8
00:00:44,520 --> 00:00:49,530
‫ブール式を返すことができる関数を実現するには？

9
00:00:50,040 --> 00:00:55,920
‫さて､ その方法はというと､ voidの代わりに型を使うだけです｡

10
00:00:55,920 --> 00:01:03,660
‫つまり､ ブーリアン式を返すとしたら､ 変数と同じようにbool型を使用します｡

11
00:01:03,660 --> 00:01:10,440
‫しかし､ 関数と変数を区別するものは､ 変数ではなく関数にする括弧を後につけるという事実である｡

12
00:01:10,620 --> 00:01:18,510
‫そして､ それをshould platform returnと呼び､ 括弧をつけるのです｡

13
00:01:18,510 --> 00:01:24,420
‫この場合､ この関数に引数として渡したいものは何もないので､ パラメータ・リストを空にして､

14
00:01:24,420 --> 00:01:31,620
‫行末にセミコロンを付け､ この行全体をコピーして移動プラットフォームに移動すればよいのです｡

15
00:01:31,620 --> 00:01:37,140
‫CP そして､ ファイルの最後には､ どの機能の間にも好きなように入れることができます｡

16
00:01:37,140 --> 00:01:39,690
‫関数の中でないことを確認してください｡

17
00:01:39,840 --> 00:01:41,160
‫ここに貼り付けます｡

18
00:01:41,160 --> 00:01:46,170
‫インデントして､ クラスandを追加しています｡

19
00:01:46,850 --> 00:01:48,380
‫スコープレゾリューションが動作します｡

20
00:01:48,380 --> 00:01:56,900
‫だから､ 移動するプラットフォームのコロンコロンがプラットフォームを返すべきで､ 次にセミコロンを削除し､ 代わりにいくつかの中括弧を追加します｡

21
00:01:57,500 --> 00:02:04,160
‫そして､ ここでやりたいことは､ 実際に結果を返したいのであれば､ 特別なキーワードreturnを使い､

22
00:02:04,160 --> 00:02:10,100
‫その後に正しい型の式を続ける必要があります｡

23
00:02:10,100 --> 00:02:15,050
‫つまり､ この場合はブール式でなければならないので､ trueを返して最後にセミコロンを付けるか､

24
00:02:15,050 --> 00:02:19,100
‫falseを返して最後にセミコロンを付けるかです｡

25
00:02:19,580 --> 00:02:21,380
‫でも､ そんな簡単なことでいいんです｡

26
00:02:21,380 --> 00:02:23,750
‫実はどんな表現でもいいんです｡

27
00:02:23,750 --> 00:02:31,790
‫それは､ 関数の呼び出しであったり､ 変数であったり､ 文の中で使っている演算子であったりします｡

28
00:02:32,000 --> 00:02:34,820
‫では､ 実際に､ そうしてみましょう｡

29
00:02:34,820 --> 00:02:36,800
‫この表現でいこうと思います｡

30
00:02:36,800 --> 00:02:41,330
‫移動した距離とあるのはmov距離より大きい｡

31
00:02:41,330 --> 00:02:50,180
‫それを切り取って､ このshould platform return関数の戻り値式にするんです｡

32
00:02:50,540 --> 00:02:58,220
‫距離の移動がローカル変数でないため､ ここで文句を言われることに気づきました｡

33
00:02:58,520 --> 00:03:00,290
‫だから､ もっといろいろなものを移動させないといけないんです｡

34
00:03:00,290 --> 00:03:06,830
‫しかし､ その前に､ if文の中でこのshould platform returnを呼び出して､ should

35
00:03:06,830 --> 00:03:14,900
‫platform returnと括弧を付けて､ F文の中で実際に関数が呼び出されるようにするのを忘れないようにしたいです｡

36
00:03:14,900 --> 00:03:17,180
‫だから今､ 僕には少し読みやすくなってきたんです｡

37
00:03:17,180 --> 00:03:21,410
‫もし､ プラットフォームが戻ってくるはずなら､ 次のことをすべて行います｡

38
00:03:22,100 --> 00:03:29,600
‫では､ MOVEプラットフォームで取得した移動距離の変数を渡せばいいのです｡

39
00:03:29,600 --> 00:03:31,400
‫MOVEプラットフォームの中では､ 実は必要ないんです｡

40
00:03:31,400 --> 00:03:35,990
‫文を返す前に切り取って持ってきて､ ラインに乗せるつもりです｡

41
00:03:35,990 --> 00:03:45,590
‫通常､ return文は関数の中で最後の文になります｡ なぜなら､ 一度関数から戻った後は､ 実際には何もしないからです｡

42
00:03:45,590 --> 00:03:55,010
‫もし､ ログメッセージのようなものを入れるとしたら､ だから､ return文の後にyou logを何かしらのメッセージと一緒に入れておく｡

43
00:03:55,430 --> 00:04:05,480
‫通常は､ コンパイラから「この行は決して到達しないので､ おそらくこんなことをするつもりはなかったのでしょう」という警告が出るはずです｡

44
00:04:05,780 --> 00:04:08,930
‫だから､ 通常return文は最後になる｡

45
00:04:09,590 --> 00:04:16,820
‫つまり､ should platform return関数で移動距離を定義する線を越えて移動したことで､

46
00:04:16,820 --> 00:04:22,520
‫現在地がない､ 現在地は簡単に取得できる､ should platform returnを呼び出す直前に現在地を設定した､

47
00:04:22,520 --> 00:04:28,610
‫と言っているのがわかりますね｡

48
00:04:28,610 --> 00:04:32,330
‫だから､ 実際にアクティブな場所を確保することは､ まさに私たちの望むところです｡

49
00:04:32,330 --> 00:04:42,200
‫だから､ 変数の代わりに､ その場所にアクティブな位置を取得するための呼び出しを置くだけで､ プラットフォームが返すべきものなのです｡

50
00:04:42,200 --> 00:04:50,480
‫つまり､ 移動した距離は､ 開始位置と現在位置の距離と等しくなります｡

51
00:04:50,810 --> 00:04:56,000
‫そのため､ 設定された移動距離よりも大きい場合は､ プラットフォームが戻るはずです｡

52
00:04:56,000 --> 00:05:03,890
‫この機能はそういうことで､ MOVEプラットフォームの機能の中から､ より抽象度の高い形で利用することができます｡

53
00:05:04,190 --> 00:05:09,590
‫さて､ 今度は距離移動のオーバーシュートが印刷できないと文句を言っていることにお気づきでしょうか｡

54
00:05:09,590 --> 00:05:10,970
‫まあ､ それは大したことではありません｡

55
00:05:11,000 --> 00:05:13,760
‫実はもう印刷したくないんです｡

56
00:05:13,760 --> 00:05:15,470
‫とにかく機能がめちゃめちゃなんです｡

57
00:05:15,470 --> 00:05:18,200
‫そこで､ オーバーシュート変数の行を削除することにします｡

58
00:05:18,200 --> 00:05:23,390
‫get nameの行を削除するつもりです､ ログメッセージは一時的にしか存在しなかったので､

59
00:05:23,390 --> 00:05:26,900
‫ログのテンポラリ名を削除するつもりです｡

60
00:05:27,290 --> 00:05:32,210
‫これで､ ムーブプラットフォームの機能がかなりすっきりしてきましたね｡

61
00:05:32,210 --> 00:05:35,480
‫ここでは､ 位置情報の更新を行っていることがわかります｡

62
00:05:35,480 --> 00:05:38,480
‫プラットフォームが戻るべきか､ 戻るべきかを確認することができます｡

63
00:05:38,480 --> 00:05:41,660
‫そして､ 位置を更新して､ 反転させているところです｡

64
00:05:41,660 --> 00:05:51,230
‫ここで､ ひとつだけ､ もう少し見栄えが良くなると思うのは､ このようなコードの束をトップに置くのではなく､ altステートメントを置いたらどうだろうということです｡

65
00:05:51,230 --> 00:05:58,190
‫もしプラットフォームが戻ってきたら､ これを実行し､ そうでなければ通常のコードを実行し､

66
00:05:58,190 --> 00:05:59,570
‫前進させます｡

67
00:05:59,570 --> 00:06:03,860
‫そこで､ alt文の話をしたときに思いを馳せてみてください｡

68
00:06:03,890 --> 00:06:07,610
‫if文の後に来るだけで､ こんな風にやるだけです｡

69
00:06:07,610 --> 00:06:12,800
‫中括弧の後に改行してelseと入力し､ さらに改行して新しい括弧をいくつか開いたら､

70
00:06:12,800 --> 00:06:17,120
‫このコードをティックの一番上に移動させます｡

71
00:06:17,120 --> 00:06:20,510
‫それを受けて､ alt文の中に移動させればいいのです｡

72
00:06:20,510 --> 00:06:22,850
‫だから今は､ かなりわかりやすいと思います｡

73
00:06:22,850 --> 00:06:26,900
‫プラットフォームが返ってきた後に､ プラットフォームが返ってくるコードを別の方法で行うべきでしょうか？

74
00:06:26,900 --> 00:06:30,740
‫私たちは､ プラットフォーム・ベロシティでプラットフォームを前進させています｡

75
00:06:30,740 --> 00:06:35,030
‫では､ 戻り値のある関数を自分で作ることに挑戦してみたいと思います｡

76
00:06:35,030 --> 00:06:38,060
‫移動距離の取得機能を追加してほしい｡

77
00:06:38,060 --> 00:06:41,990
‫そこで､ 現在はこれを移動距離という変数に計算しています｡

78
00:06:42,020 --> 00:06:45,860
‫その代わりに関数の呼び出しに置き換えてほしい｡

79
00:06:46,310 --> 00:06:54,410
‫つまり､ 移動した距離の型がそうなので､ floatを返すべきで､ should platform returnで呼び出すべきでしょう｡

80
00:06:54,410 --> 00:06:59,000
‫ですから､ vector distを使うのではなく､ 独自の実装を使うべきなのです｡

81
00:06:59,000 --> 00:07:02,000
‫では､ どのようなコードを含むべきなのでしょうか｡

82
00:07:02,000 --> 00:07:04,190
‫どのようなコードで入れればいいのでしょうか？

83
00:07:04,220 --> 00:07:09,680
‫ヒントは､ このコードはすでにタイプしてあるので､ それを新しい関数にコピー＆ペーストするだけです｡

84
00:07:09,680 --> 00:07:14,960
‫しかし､ 移動した距離の値を返すように､ return式をどうするか､

85
00:07:14,960 --> 00:07:17,390
‫少し考えてみてください｡

86
00:07:17,420 --> 00:07:19,220
‫ビデオを一時停止して､ 試してみてください｡

87
00:07:22,950 --> 00:07:23,850
‫お帰りなさい｡

88
00:07:24,150 --> 00:07:26,150
‫それでは､ ファイルの先頭に移動してみましょう｡

89
00:07:26,160 --> 00:07:33,330
‫ここでは､ get distance movedというfloatの戻り値を持つ新しい関数を追加することにします｡

90
00:07:33,330 --> 00:07:36,240
‫そして､ 括弧の中に引数を入れないようにする｡

91
00:07:36,420 --> 00:07:39,150
‫そして､ ムービングプラットフォームのほうに移動します｡

92
00:07:39,150 --> 00:07:53,550
‫CP フロート､ 移動台､ コロン､ コロン距離の移動､ 距離の移動を得る､ 括弧と言うべきでしょうか､ を入れていくのです｡

93
00:07:53,550 --> 00:07:58,020
‫そして､ 次の行に新しい中括弧を付けます｡

94
00:07:58,410 --> 00:08:07,950
‫そして､ 文字どおり､ 距離移動のフロートを作成するために使用している式だけを返したいのです｡

95
00:08:07,950 --> 00:08:15,240
‫つまり､ fベクトル､ コロン､ 距離､ 開始位置､ アクティブ位置の取得､ そしてその行の最後にセミコロンを置くということです｡

96
00:08:15,390 --> 00:08:17,610
‫そしてそれは､ プラットフォームが戻るべきということです｡

97
00:08:17,610 --> 00:08:22,560
‫さて､ この距離の移動した変数を持つ代わりに､ 半分完成したその行を削除します｡

98
00:08:22,950 --> 00:08:27,630
‫距離の移動を返します｡

99
00:08:28,080 --> 00:08:31,890
‫括弧内は移動距離より大きい｡

100
00:08:31,890 --> 00:08:39,660
‫つまり､ 変数に入っていたものを､ 代わりに独自の関数に取り出したのです｡

101
00:08:39,660 --> 00:08:45,180
‫つまり､ 移動距離を参照したいときはいつでも､ MOVEプラットフォームにログメッセージを残しておきたいときは､

102
00:08:45,180 --> 00:08:53,880
‫クラスのどの関数からでも簡単に移動距離を取得する関数を呼び出すことができるのです｡

103
00:08:53,880 --> 00:08:54,450
‫素晴らしい内容です｡

104
00:08:54,450 --> 00:09:03,120
‫この講義では､ return文と戻り値について学び､ それを使ってクラスで2つの新しい関数を作成しました｡

105
00:09:03,120 --> 00:09:04,590
‫それでは､ 次回の講義でお会いしましょう｡

