﻿1
00:00:04,270 --> 00:00:05,530
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,530 --> 00:00:11,830
‫ในการบรรยายนี้ เราจะเรียนรู้วิธีที่เราสามารถลบหมุดการดำเนินการออกจากฟังก์ชันของเราเอง

3
00:00:11,830 --> 00:00:15,760
‫และอย่างไรและเมื่อใดที่ควรทำเช่นนี้

4
00:00:15,760 --> 00:00:16,690
‫มาดำดิ่งกัน

5
00:00:16,960 --> 00:00:27,610
‫ดังนั้นจึงเป็นเรื่องแปลกเล็กน้อยที่ฟังก์ชันกระสุนของเรามีพินการดำเนินการเมื่อก่อนหน้านี้เราไม่ต้องการสิ่งนั้นและนั่นทำให้โค้ดของเราแย่ลงเล็กน้อย

6
00:00:27,610 --> 00:00:29,110
‫แล้วนั่นคืออะไร?

7
00:00:29,110 --> 00:00:35,710
‫เหตุใดจึงเกิดขึ้นและเหตุใดโหนดฟังก์ชันบางโหนดจึงต้องการพินการดำเนินการและโหนดอื่นไม่ต้องการ

8
00:00:35,710 --> 00:00:39,850
‫มันขึ้นอยู่กับสิ่งที่เรียกว่าผลข้างเคียง

9
00:00:39,850 --> 00:00:42,250
‫แล้วผลข้างเคียงคืออะไร?

10
00:00:42,250 --> 00:00:50,260
‫โดยพื้นฐานแล้ว ผลข้างเคียงคือเมื่อฟังก์ชันมีผลที่สังเกตได้หลังจากที่เรียกใช้แล้ว

11
00:00:50,350 --> 00:00:52,090
‫นี่ฉันหมายความว่ายังไงเนี่ย?

12
00:00:52,090 --> 00:00:57,060
‫มาดูตัวอย่างฟังก์ชันที่มีผลข้างเคียงกันบ้าง เพื่อให้คุณเข้าใจงานพิมพ์

13
00:00:57,400 --> 00:00:58,420
‫การพิมพ์ สตริง

14
00:00:58,870 --> 00:01:01,090
‫หลังจากที่คุณได้เรียกใช้สตริงการพิมพ์

15
00:01:01,090 --> 00:01:05,860
‫ค่อนข้างชัดเจนว่ามีบางอย่างเกิดขึ้นเพราะตอนนี้มีสตริงบนหน้าจอของคุณ

16
00:01:05,860 --> 00:01:12,490
‫คุณจะเห็นว่ามีสตริงเพิ่มแรงกระตุ้นที่เห็นได้ชัดว่ามีผลที่สังเกตได้ เพราะจู่ๆ

17
00:01:12,490 --> 00:01:16,960
‫สิ่งที่คุณเพิ่มแรงกระตุ้นก็บินออกไปในระยะไกล

18
00:01:17,440 --> 00:01:25,210
‫ชุดกระสุนมีผลที่สังเกตได้เพราะหลังจากที่คุณตั้งค่ากระสุนแล้ว ค่าในตัวแปรนั้นเปลี่ยนไป

19
00:01:25,210 --> 00:01:29,320
‫ณ จุดนี้ คุณอาจสงสัยว่า ทุกฟังก์ชันมีผลที่สังเกตได้

20
00:01:29,320 --> 00:01:31,540
‫มิฉะนั้นประเด็นของมันคืออะไร?

21
00:01:31,600 --> 00:01:32,740
‫ก็ไม่เชิง

22
00:01:32,740 --> 00:01:35,590
‫มีสิ่งต่าง ๆ เช่นหน้าที่บริสุทธิ์

23
00:01:35,590 --> 00:01:37,600
‫ฟังก์ชั่นบริสุทธิ์คืออะไร?

24
00:01:38,200 --> 00:01:41,170
‫โดยพื้นฐานแล้วมันเป็นฟังก์ชันที่ไม่มีผลข้างเคียง

25
00:01:41,170 --> 00:01:45,040
‫อย่างไรก็ตามมันมีค่าส่งคืน

26
00:01:45,040 --> 00:01:47,380
‫จึงมีค่าออกมาจากฟังก์ชันนั้น

27
00:01:47,380 --> 00:01:53,830
‫และนั่นคือจุดประสงค์ทั้งหมดของฟังก์ชันคือการคำนวณและให้ค่าเหล่านั้นแก่เรา

28
00:01:53,830 --> 00:01:57,250
‫ลองมาดูตัวอย่างกันอีกครั้งเพราะจะทำให้ชัดเจนยิ่งขึ้น

29
00:01:57,520 --> 00:01:58,570
‫รับกระสุน.

30
00:01:58,570 --> 00:02:01,090
‫นั่นคือหน้าที่บริสุทธิ์

31
00:02:01,090 --> 00:02:06,640
‫มันไม่มีผลข้างเคียงเพราะคุณสามารถรับกระสุนได้มากเท่าที่คุณต้องการ

32
00:02:06,640 --> 00:02:14,380
‫และถ้าคุณไม่ทำอะไรบางอย่างด้วยคุณค่าที่คุณได้รับ โปรแกรมของคุณ เกมของคุณจะไม่แตกต่างกัน

33
00:02:14,380 --> 00:02:22,780
‫คุณสามารถเก็บกระสุนไว้ได้ตลอดเวลา ตลอดทั้งเกม และไม่มีอะไรที่จะสังเกตเห็นได้แตกต่างไปจากเกมของคุณ

34
00:02:22,810 --> 00:02:24,910
‫รับเวกเตอร์ไปข้างหน้าที่ใช้งานอยู่

35
00:02:24,910 --> 00:02:27,730
‫นั่นเป็นอีกที่หนึ่งที่คุณจะได้รับมันหลายครั้งเท่าที่คุณต้องการ

36
00:02:27,730 --> 00:02:34,330
‫มันจะไม่เปลี่ยนแปลงอะไรจนกว่าคุณจะทำบางสิ่งกับค่าที่ส่งคืนและฟังก์ชันทางคณิตศาสตร์ทั้งหมดเหล่านี้

37
00:02:34,330 --> 00:02:37,900
‫เช่น คูณ ลบ มากกว่า

38
00:02:37,900 --> 00:02:47,260
‫โหนดทั้งหมดเหล่านี้ไม่มีผลกับโปรเจ็กต์ของคุณ จนกว่าจะมีการใช้ผลลัพธ์เพื่อจุดประสงค์ที่มากขึ้น

39
00:02:47,260 --> 00:02:53,290
‫ดังนั้นสิ่งเหล่านี้จึงเรียกว่าฟังก์ชันบริสุทธิ์ และคุณอาจเห็นได้ว่าโหนดเหล่านี้เป็นโหนดที่ไม่มีพินการดำเนินการใดๆ

40
00:02:53,290 --> 00:02:56,920
‫เนื่องจากไม่ต้องการ

41
00:02:56,920 --> 00:03:08,320
‫ไม่สำคัญว่าเมื่อไหร่ที่ฉันจะเรียกใช้กระสุนหรือว่าฉันจะเรียกใช้มัน 50 ครั้งหรือครั้งเดียว มันจะไม่สำคัญเพราะมันไม่มีผลข้างเคียงที่สังเกตได้

42
00:03:08,560 --> 00:03:13,540
‫แล้วเราจะระบุให้พิมพ์เขียวว่าฟังก์ชันบริสุทธิ์ได้อย่างไร?

43
00:03:13,660 --> 00:03:16,150
‫มาดูฟังก์ชันการทดสอบของฉันกันที่นี่

44
00:03:16,150 --> 00:03:20,800
‫ฉันจะเลือกมันในกราฟเหตุการณ์หรือในบานหน้าต่างพิมพ์เขียวของฉัน

45
00:03:21,010 --> 00:03:25,870
‫และคุณจะเห็นว่าในบานหน้าต่างรายละเอียดมีช่องทำเครื่องหมายที่ระบุว่าบริสุทธิ์

46
00:03:25,870 --> 00:03:31,150
‫ดังนั้น หากคุณเลือกช่องทำเครื่องหมายนั้น ให้สังเกตว่าหมุดการดำเนินการหายไป

47
00:03:31,150 --> 00:03:35,410
‫และทั้งหมดที่เรามีตอนนี้คืออินพุตและเอาต์พุตของฟังก์ชันนี้

48
00:03:35,410 --> 00:03:40,120
‫ตอนนี้ฟังก์ชันนี้จะเริ่มทำงานเมื่อใดก็ตามที่เราต้องการเอาต์พุต

49
00:03:40,120 --> 00:03:46,750
‫ดังนั้นหากฉันเสียบเอาต์พุตนี้เข้ากับสตริงการพิมพ์ มันจะเรียกใช้ฟังก์ชันนี้ก่อนสตริงการพิมพ์

50
00:03:46,750 --> 00:03:51,910
‫เพื่อให้มีผลในการดำเนินการสตริงการพิมพ์ทันเวลา

51
00:03:51,910 --> 00:03:57,700
‫เราสามารถทำเช่นเดียวกันกับฟังก์ชันใดๆ ก็ได้ที่ไม่มีผลข้างเคียง โดยที่ไม่มีผลกระทบที่สังเกตได้

52
00:03:57,700 --> 00:04:01,450
‫เช่น ฟังก์ชันมีกระสุนของเรา

53
00:04:01,450 --> 00:04:06,280
‫ดังนั้นฉันจึงขอท้าให้คุณสร้างกระสุนให้เป็นฟังก์ชันที่บริสุทธิ์

54
00:04:06,280 --> 00:04:10,150
‫เพื่อเลือกและตั้งค่าช่องทำเครื่องหมายนั้นเพื่อทำให้บริสุทธิ์

55
00:04:10,360 --> 00:04:14,380
‫และเกิดอะไรขึ้นกับโฟลว์การดำเนินการในตอนนี้

56
00:04:14,380 --> 00:04:17,380
‫สิ่งที่ปัจจุบันมันถูกเชื่อมต่อผ่านฟังก์ชั่น

57
00:04:17,380 --> 00:04:18,600
‫มันไปที่ไหน?

58
00:04:18,610 --> 00:04:20,770
‫หยุดวิดีโอชั่วคราวและไปกันเลย

59
00:04:23,870 --> 00:04:24,410
‫ตกลง.

60
00:04:24,410 --> 00:04:25,360
‫ยินดีต้อนรับกลับ.

61
00:04:25,370 --> 00:04:27,460
‫เลยเลือกมีกระสุน

62
00:04:27,470 --> 00:04:41,360
‫เราจะตรวจสอบช่องกาเครื่องหมายล้วนแล้วคุณจะเห็นว่าหมุดการดำเนินการหายไปและขั้นตอนการดำเนินการที่ไหลผ่านก่อนหน้านี้มีกระสุนอยู่ในขณะนี้ไปยังคำสั่งสาขาของเราโดยตรงซึ่งเป็นสิ่งที่เราต้องการตอนนี้มีกระสุนกำลังจะไป

63
00:04:41,360 --> 00:04:51,820
‫รันทันทีที่รันคำสั่ง branch เพื่อรับค่าส่งคืน

64
00:04:51,830 --> 00:05:00,500
‫คำเตือน โปรดใช้ช่องทำเครื่องหมายนี้เฉพาะเมื่อคุณแน่ใจว่าฟังก์ชันไม่มีผลข้างเคียง

65
00:05:00,500 --> 00:05:08,180
‫กรณีทั่วไปและกรณีการใช้งานสำหรับสิ่งนี้คือเมื่อฟังก์ชันของคุณเพียงแค่พยายามคำนวณค่า เช่น

66
00:05:08,180 --> 00:05:09,290
‫มีกระสุน

67
00:05:09,290 --> 00:05:17,540
‫และนั่นคือสาเหตุที่ฟังก์ชันนี้ไม่เป็นไปตามแบบแผนของการตั้งชื่อกริยาเนื่องจากไม่ได้ทำบางอย่าง

68
00:05:17,540 --> 00:05:21,980
‫ได้รับบางสิ่งบางอย่าง หรือกำลังตอบคำถาม

69
00:05:21,980 --> 00:05:24,680
‫ในกรณีนี้ คำถามคือมีกระสุน

70
00:05:24,680 --> 00:05:29,330
‫และในความเป็นจริง เราสามารถใส่เครื่องหมายคำถามเล็กๆ น้อยๆ ในฟังก์ชันของเราได้ โดยตั้งชื่อสิ่งที่คุณสามารถทำได้ใน

71
00:05:29,330 --> 00:05:36,080
‫Blueprint ที่คุณไม่สามารถทำได้ใน C++ ซึ่งช่วยให้เราเห็นว่า ใช่ ฟังก์ชันนี้กำลังตอบคำถามอยู่

72
00:05:36,080 --> 00:05:37,850
‫มันไม่ได้พยายามที่จะทำอะไร

73
00:05:37,850 --> 00:05:46,490
‫บ่อยครั้งที่ความแตกต่างระหว่างฟังก์ชัน pure กับ non pure มักใช้กับกริยาหรือเหมาะกับคำถาม

74
00:05:46,490 --> 00:05:49,160
‫ในการทบทวน มาดูอภิธานศัพท์ของเรากัน

75
00:05:49,430 --> 00:05:56,660
‫ผลข้างเคียงเป็นผลที่สังเกตได้ของฟังก์ชันที่เราเคยเห็น และเราได้ดูตัวอย่างของฟังก์ชันเหล่านั้นแล้ว

76
00:05:56,660 --> 00:06:05,270
‫และฟังก์ชันบริสุทธิ์ก็คือฟังก์ชันที่ไม่มีผลข้างเคียง เช่น ฟังก์ชันรับฟังก์ชันหรือฟังก์ชันตอบคำถาม

77
00:06:05,390 --> 00:06:06,680
‫สำหรับการบรรยายครั้งนี้

78
00:06:06,680 --> 00:06:08,120
‫เจอกันใหม่ตอนหน้าค่ะ

