﻿1
00:00:04,270 --> 00:00:05,530
‫Xin chào và chào mừng.

2
00:00:05,530 --> 00:00:11,830
‫Trong bài giảng này, chúng ta sẽ học cách chúng ta có thể loại bỏ các chốt thực thi khỏi các hàm của riêng mình

3
00:00:11,830 --> 00:00:15,760
‫cũng như cách thức và thời điểm thực hiện điều này là ý kiến hay.

4
00:00:15,760 --> 00:00:16,690
‫Hãy đi sâu vào.

5
00:00:16,960 --> 00:00:23,560
‫Vì vậy, có một chút kỳ lạ là chức năng có đạn của chúng ta giờ đã có các chốt thực thi khi trước đây chúng ta không cần đến

6
00:00:23,560 --> 00:00:27,610
‫nó và điều đó đã khiến mã của chúng ta trở nên tồi tệ hơn một chút.

7
00:00:27,610 --> 00:00:29,110
‫Vậy đó là gì?

8
00:00:29,110 --> 00:00:35,710
‫Tại sao điều đó đã xảy ra và tại sao một số nút chức năng yêu cầu chân thực thi còn những nút khác thì không?

9
00:00:35,710 --> 00:00:39,850
‫Chà, tất cả đều do một thứ gọi là tác dụng phụ.

10
00:00:39,850 --> 00:00:42,250
‫Vậy tác dụng phụ là gì?

11
00:00:42,250 --> 00:00:49,570
‫Về cơ bản, tác dụng phụ là khi một hàm có một số loại hiệu ứng có thể quan sát được sau khi nó

12
00:00:49,570 --> 00:00:50,260
‫được chạy.

13
00:00:50,350 --> 00:00:52,090
‫Bây giờ, tôi muốn nói gì về điều này?

14
00:00:52,090 --> 00:00:57,060
‫Chúng ta hãy xem một số ví dụ về các hàm với các hiệu ứng phụ để bạn có thể hiểu

15
00:00:57,400 --> 00:00:58,420
‫được print, print, string.

16
00:00:58,870 --> 00:01:01,090
‫Sau khi bạn đã chạy chuỗi in.

17
00:01:01,090 --> 00:01:05,860
‫Rõ ràng là có điều gì đó đã xảy ra vì hiện có một chuỗi trên màn hình của bạn.

18
00:01:05,860 --> 00:01:12,490
‫Bạn có thể thấy rằng có một chuỗi thêm xung lực rõ ràng có tác dụng quan sát được bởi

19
00:01:12,490 --> 00:01:16,960
‫vì đột nhiên thứ mà bạn đã thêm xung lực bay ra xa.

20
00:01:17,440 --> 00:01:25,210
‫Đặt đạn có tác dụng quan sát được vì sau khi bạn đặt đạn, giá trị trong biến đó đã thay đổi.

21
00:01:25,210 --> 00:01:29,320
‫Tại thời điểm này, bạn có thể tự hỏi, tốt, chắc chắn mọi chức năng đều có tác dụng quan sát được.

22
00:01:29,320 --> 00:01:31,540
‫Nếu không, nó là gì?

23
00:01:31,600 --> 00:01:32,740
‫Chà, không hoàn toàn.

24
00:01:32,740 --> 00:01:35,590
‫Có những thứ như chức năng thuần túy.

25
00:01:35,590 --> 00:01:37,600
‫Hàm thuần túy là gì?

26
00:01:38,200 --> 00:01:41,170
‫Về cơ bản nó là một chức năng không có tác dụng phụ.

27
00:01:41,170 --> 00:01:45,040
‫Tuy nhiên, nó có giá trị trả về.

28
00:01:45,040 --> 00:01:47,380
‫Vì vậy, có những giá trị đi ra từ chức năng đó.

29
00:01:47,380 --> 00:01:53,830
‫Và đó là toàn bộ mục đích của hàm là tính toán và cung cấp cho chúng ta những giá trị đó.

30
00:01:53,830 --> 00:01:57,250
‫Vì vậy, một lần nữa, chúng ta hãy xem xét một số ví dụ vì điều này sẽ làm cho nó rõ ràng hơn rất nhiều.

31
00:01:57,520 --> 00:01:58,570
‫Lấy đạn.

32
00:01:58,570 --> 00:02:01,090
‫Đó là một chức năng thuần túy.

33
00:02:01,090 --> 00:02:06,640
‫Nó không có tác dụng phụ vì bạn có thể lấy đạn bao nhiêu lần tùy thích.

34
00:02:06,640 --> 00:02:12,940
‫Và trừ khi bạn làm điều gì đó với giá trị mà bạn có được từ nó, chương trình của bạn, trò chơi của bạn sẽ

35
00:02:12,940 --> 00:02:14,380
‫không có gì khác biệt.

36
00:02:14,380 --> 00:02:20,320
‫Bạn có thể tiếp tục nhận được đạn mọi lúc, trong suốt trò chơi của bạn và sẽ không có gì có

37
00:02:20,320 --> 00:02:22,780
‫thể quan sát được về trò chơi của bạn.

38
00:02:22,810 --> 00:02:24,910
‫Nhận vectơ chuyển tiếp hoạt động.

39
00:02:24,910 --> 00:02:27,730
‫Đó là một cái khác mà bạn có thể lấy nó bao nhiêu lần tùy thích.

40
00:02:27,730 --> 00:02:34,330
‫Nó sẽ không thay đổi bất cứ điều gì cho đến khi bạn làm điều gì đó với giá trị được trả về và

41
00:02:34,330 --> 00:02:37,900
‫tất cả các hàm toán học này như nhân trừ lớn hơn.

42
00:02:37,900 --> 00:02:46,480
‫Tất cả các nút này không ảnh hưởng đến dự án của bạn cho đến khi kết quả của chúng được sử dụng cho một số mục đích

43
00:02:46,480 --> 00:02:47,260
‫lớn hơn.

44
00:02:47,260 --> 00:02:53,290
‫Vì vậy, chúng được gọi là các hàm thuần túy và bạn có thể thấy rằng đây chính xác là các nút

45
00:02:53,290 --> 00:02:56,920
‫không có bất kỳ chân thực thi nào vì chúng không cần chúng.

46
00:02:56,920 --> 00:03:04,330
‫Không quan trọng khi tôi chạy có bị dính đạn hay tôi chạy 50 lần hay một lần, điều đó không quan trọng

47
00:03:04,330 --> 00:03:08,320
‫vì nó không có tác dụng phụ có thể quan sát được.

48
00:03:08,560 --> 00:03:13,540
‫Vì vậy, làm thế nào chúng ta có thể chỉ ra để thiết kế chi tiết rằng một hàm là thuần túy?

49
00:03:13,660 --> 00:03:16,150
‫Vâng, chúng ta hãy xem xét chức năng kiểm tra của tôi ở đây.

50
00:03:16,150 --> 00:03:20,800
‫Vì vậy, tôi sẽ chọn nó trong biểu đồ sự kiện hoặc hơn trong ngăn kế hoạch chi tiết của tôi.

51
00:03:21,010 --> 00:03:25,870
‫Và bạn có thể thấy rằng trong ngăn chi tiết có một hộp kiểm được gắn nhãn thuần túy.

52
00:03:25,870 --> 00:03:31,150
‫Vì vậy, nếu bạn chọn hộp kiểm đó, hãy chú ý rằng các chân thực thi vừa biến mất.

53
00:03:31,150 --> 00:03:35,410
‫Và tất cả những gì chúng ta có bây giờ là đầu vào và đầu ra của chức năng này.

54
00:03:35,410 --> 00:03:40,120
‫Bây giờ hàm này sẽ được chạy bất cứ khi nào chúng ta cần đầu ra.

55
00:03:40,120 --> 00:03:46,750
‫Vì vậy, nếu tôi cắm đầu ra này vào một chuỗi in, thì nó sẽ chạy hàm này trước

56
00:03:46,750 --> 00:03:51,910
‫chuỗi in để nó có kết quả kịp thời để thực thi chuỗi in.

57
00:03:51,910 --> 00:03:57,700
‫Chúng ta có thể làm tương tự với bất kỳ chức năng nào mà không có tác dụng phụ, nơi không có tác

58
00:03:57,700 --> 00:04:01,450
‫dụng quan sát được chẳng hạn như chức năng có đạn của chúng tôi.

59
00:04:01,450 --> 00:04:06,280
‫Vì vậy, tôi muốn thách thức bạn biến đạn thành một chức năng thuần túy.

60
00:04:06,280 --> 00:04:10,150
‫Vì vậy, hãy chọn nó và đặt hộp kiểm đó để làm cho nó thuần túy.

61
00:04:10,360 --> 00:04:14,380
‫Và điều gì sẽ xảy ra với luồng thực thi bây giờ.

62
00:04:14,380 --> 00:04:17,380
‫Những gì hiện tại nó đã được nối thông qua chức năng.

63
00:04:17,380 --> 00:04:18,600
‫Nó đi đâu?

64
00:04:18,610 --> 00:04:20,770
‫Tạm dừng video và tiếp tục.

65
00:04:23,870 --> 00:04:24,410
‫Được chứ.

66
00:04:24,410 --> 00:04:25,360
‫Chào mừng trở lại.

67
00:04:25,370 --> 00:04:27,460
‫Vì vậy, hãy chọn có đạn.

68
00:04:27,470 --> 00:04:34,760
‫Chúng tôi sẽ đánh dấu vào hộp kiểm thuần túy và ngay lập tức bạn thấy rằng các chốt thực thi biến mất và

69
00:04:34,760 --> 00:04:41,360
‫luồng thực thi trước đó đã chạy qua có đạn bây giờ sẽ chuyển trực tiếp đến câu lệnh nhánh của

70
00:04:41,360 --> 00:04:48,770
‫chúng tôi, đó chính xác là những gì chúng tôi muốn bây giờ có đạn sẽ được chạy ngay sau khi câu lệnh rẽ nhánh

71
00:04:48,770 --> 00:04:51,820
‫được chạy để nắm giữ giá trị trả về.

72
00:04:51,830 --> 00:05:00,500
‫Bây giờ, một lời cảnh báo chỉ sử dụng hộp kiểm thuần túy này khi bạn chắc chắn rằng một chức năng không có tác dụng phụ.

73
00:05:00,500 --> 00:05:08,180
‫Các trường hợp phổ biến và trường hợp sử dụng cho trường hợp này là khi hàm của bạn chỉ đơn giản là cố gắng tính toán một giá trị chẳng

74
00:05:08,180 --> 00:05:09,290
‫hạn như có đạn.

75
00:05:09,290 --> 00:05:17,540
‫Và đó là lý do tại sao hàm này không tuân theo quy ước đặt tên động từ bởi vì nó không làm việc gì đó, nó

76
00:05:17,540 --> 00:05:21,980
‫đang nhận một thứ gì đó hoặc nó đang trả lời một câu hỏi.

77
00:05:21,980 --> 00:05:24,680
‫Trong trường hợp này, câu hỏi là có đạn.

78
00:05:24,680 --> 00:05:29,330
‫Và trên thực tế, chúng tôi thậm chí có thể đặt một dấu chấm hỏi nhỏ trong hàm của mình, đặt tên cho

79
00:05:29,330 --> 00:05:35,390
‫một cái gì đó mà bạn có thể làm trong Blueprint mà bạn không thể làm trong C ++, cho phép chúng tôi thấy rằng, vâng, hàm này đang trả lời

80
00:05:35,390 --> 00:05:36,080
‫một câu hỏi.

81
00:05:36,080 --> 00:05:37,850
‫Nó không cố gắng làm điều gì đó.

82
00:05:37,850 --> 00:05:44,270
‫Vì vậy, sự phân biệt giữa các chức năng thuần túy và không thuần túy là liệu nó có phù hợp với một động từ hoặc liệu nó

83
00:05:44,270 --> 00:05:46,490
‫có phù hợp với một câu hỏi hay không.

84
00:05:46,490 --> 00:05:49,160
‫Vì vậy, để xem lại, chúng ta hãy xem bảng thuật ngữ của chúng tôi.

85
00:05:49,430 --> 00:05:56,660
‫Hiệu ứng phụ là một hiệu ứng có thể quan sát được của một chức năng mà chúng tôi đã thấy và chúng tôi đã xem các ví dụ về các chức năng đó.

86
00:05:56,660 --> 00:06:04,010
‫Và một chức năng thuần túy là một chức năng không có tác dụng phụ, chẳng hạn như những chức năng nhận được hoặc chức năng

87
00:06:04,010 --> 00:06:05,270
‫trả lời câu hỏi.

88
00:06:05,390 --> 00:06:06,680
‫Đó là nó cho bài giảng này.

89
00:06:06,680 --> 00:06:08,120
‫Hẹn gặp lại các bạn trong phần tiếp theo.

