﻿1
00:00:04,330 --> 00:00:05,470
‫Cześć i witaj.

2
00:00:05,470 --> 00:00:11,620
‫Na tym wykładzie nauczymy się, jak usunąć piny wykonawcze z naszych własnych funkcji

3
00:00:11,920 --> 00:00:15,610
‫oraz jak i kiedy warto to zrobić.

4
00:00:15,730 --> 00:00:16,420
‫Zanurzmy się.

5
00:00:17,050 --> 00:00:23,470
‫Więc to trochę dziwne, że nasza funkcja has ammo ma teraz piny wykonawcze, gdy wcześniej

6
00:00:23,470 --> 00:00:27,400
‫ich nie potrzebowaliśmy, a to trochę pogorszyło nasz kod.

7
00:00:27,700 --> 00:00:29,050
‫Więc co to jest?

8
00:00:29,050 --> 00:00:30,190
‫Dlaczego tak się stało?

9
00:00:30,190 --> 00:00:35,530
‫I dlaczego niektóre węzły funkcji wymagają pinów wykonawczych, a inne nie?

10
00:00:35,740 --> 00:00:39,700
‫Cóż, wszystko sprowadza się do czegoś, co nazywa się efektem ubocznym.

11
00:00:39,820 --> 00:00:41,950
‫Więc jaki jest efekt uboczny?

12
00:00:42,220 --> 00:00:49,990
‫Zasadniczo, efekt uboczny ma miejsce, gdy funkcja ma jakiś obserwowalny efekt po jej uruchomieniu.

13
00:00:50,470 --> 00:00:52,040
‫Co mam przez to na myśli?

14
00:00:52,060 --> 00:00:56,990
‫Przyjrzyjmy się kilku przykładom funkcji z efektami ubocznymi, aby zrozumieć,

15
00:00:57,010 --> 00:00:59,980
‫jak wypisuje ciąg drukowania po uruchomieniu.

16
00:00:59,980 --> 00:01:05,830
‫Print string jest całkiem jasne, że coś się stało, ponieważ na ekranie pojawił się napis.

17
00:01:05,830 --> 00:01:12,400
‫Widać, że istnieje impuls dodawania struny, który wyraźnie daje obserwowalny efekt, ponieważ nagle

18
00:01:12,400 --> 00:01:19,360
‫przedmiot, do którego dodałeś impuls, odlatuje na odległość ustawiona amunicja nie daje obserwowalnego efektu,

19
00:01:19,360 --> 00:01:25,090
‫ponieważ po ustawieniu amunicji wartość w tej zmiennej uległa zmianie.

20
00:01:25,240 --> 00:01:29,290
‫W tym momencie możesz się zastanawiać, cóż, na pewno każda funkcja ma obserwowalny efekt.

21
00:01:29,290 --> 00:01:31,270
‫W przeciwnym razie, jaki to ma sens?

22
00:01:31,720 --> 00:01:32,710
‫Cóż, nie do końca.

23
00:01:32,710 --> 00:01:35,560
‫Są takie rzeczy jak czyste funkcje.

24
00:01:35,560 --> 00:01:41,020
‫Czysta funkcja jest w zasadzie funkcją bez skutków ubocznych.

25
00:01:41,200 --> 00:01:44,890
‫Jednak ma zwracane wartości.

26
00:01:45,130 --> 00:01:47,350
‫Więc są wartości wychodzące z tej funkcji.

27
00:01:47,350 --> 00:01:53,650
‫I to jest cały cel funkcji, aby obliczyć i podać nam te wartości.

28
00:01:53,890 --> 00:01:57,010
‫Więc ponownie, spójrzmy na kilka przykładów, ponieważ dzięki temu będzie to znacznie jaśniejsze.

29
00:01:57,580 --> 00:01:58,420
‫Zdobądź amunicję.

30
00:01:58,540 --> 00:02:01,030
‫To czysta funkcja.

31
00:02:01,030 --> 00:02:06,490
‫Nie ma skutków ubocznych, ponieważ amunicję możesz dostawać tyle razy, ile chcesz.

32
00:02:06,700 --> 00:02:12,910
‫I jeśli nie zrobisz czegoś z wartością, którą z niego wyciągnął, twój program, twoja gra nie

33
00:02:12,910 --> 00:02:14,350
‫będzie się różnić.

34
00:02:14,350 --> 00:02:20,260
‫Możesz po prostu dostawać amunicję przez cały czas, przez całą grę i nic nie

35
00:02:20,260 --> 00:02:22,600
‫będzie zauważalne w twojej grze.

36
00:02:22,750 --> 00:02:24,850
‫Uzyskaj aktywny wektor do przodu.

37
00:02:24,850 --> 00:02:27,700
‫To kolejny, w którym możesz go dostać tyle razy, ile chcesz.

38
00:02:27,700 --> 00:02:34,300
‫Nic się nie zmieni, dopóki nie zrobisz czegoś ze zwróconą wartością i wszystkimi tymi

39
00:02:34,300 --> 00:02:37,660
‫matematycznymi funkcjami, takimi jak pomnóż minus większe.

40
00:02:37,930 --> 00:02:46,390
‫Wszystkie te węzły nie mają wpływu na twój projekt, dopóki ich wyniki nie zostaną użyte w jakimś większym

41
00:02:46,390 --> 00:02:47,110
‫celu.

42
00:02:47,350 --> 00:02:53,230
‫Nazywa się to czystymi funkcjami i prawdopodobnie widać, że są to dokładnie te węzły, które

43
00:02:53,230 --> 00:02:56,830
‫nie mają żadnych pinów wykonawczych, ponieważ ich nie potrzebują.

44
00:02:56,830 --> 00:03:04,300
‫Nie ma znaczenia, kiedy biegnę po amunicję, czy też uruchamiam 50 razy raz, to nie będzie

45
00:03:04,300 --> 00:03:08,080
‫miało znaczenia, ponieważ nie ma widocznych skutków ubocznych.

46
00:03:08,620 --> 00:03:13,300
‫Jak więc możemy wskazać plan, że funkcja jest czysta?

47
00:03:13,750 --> 00:03:16,120
‫Cóż, spójrzmy tutaj na moją funkcję testową.

48
00:03:16,120 --> 00:03:20,560
‫Więc wybiorę go na wykresie zdarzeń lub w okienku mojego planu.

49
00:03:21,100 --> 00:03:25,860
‫I widać, że w okienku szczegółów znajduje się pole wyboru oznaczone jako czysty.

50
00:03:25,870 --> 00:03:31,120
‫Więc jeśli zaznaczysz to pole wyboru, zauważ, że wzorce wykonywania po prostu zniknęły.

51
00:03:31,120 --> 00:03:35,140
‫A wszystko, co mamy teraz, to wejścia i wyjścia tej funkcji.

52
00:03:35,560 --> 00:03:40,060
‫Teraz ta funkcja zostanie uruchomiona, gdy będziemy potrzebować danych wyjściowych.

53
00:03:40,060 --> 00:03:47,140
‫Więc jeśli podłączę to wyjście do łańcucha drukowania, to uruchomi tę funkcję przed napisem drukowania.

54
00:03:47,260 --> 00:03:51,610
‫Więc ma wynik w czasie do wykonania napisu do drukowania.

55
00:03:52,030 --> 00:03:57,640
‫Możemy zrobić to samo z każdą funkcją, w której nie ma skutków ubocznych, gdzie

56
00:03:57,640 --> 00:04:01,360
‫nie ma widocznych skutków, takich jak nasza funkcja amunicji.

57
00:04:01,420 --> 00:04:06,010
‫Dlatego chciałbym rzucić wyzwanie, aby amunicja stała się czystą funkcją.

58
00:04:06,430 --> 00:04:09,880
‫Wybierz go i ustaw to pole wyboru, aby było czyste.

59
00:04:10,450 --> 00:04:14,320
‫A co dzieje się teraz z przepływem egzekucji.

60
00:04:14,320 --> 00:04:17,200
‫Co aktualnie było podpięte przez funkcję.

61
00:04:17,470 --> 00:04:18,340
‫Dokąd to zmierza?

62
00:04:18,730 --> 00:04:20,530
‫Wstrzymaj wideo i spróbuj.

63
00:04:23,780 --> 00:04:24,350
‫Dobra.

64
00:04:24,350 --> 00:04:25,160
‫Witamy spowrotem.

65
00:04:25,460 --> 00:04:32,780
‫Wybierzmy więc ma amunicję, zaznaczymy czyste pole wyboru i natychmiast zobaczysz, że pinezki wykonania znikają,

66
00:04:32,780 --> 00:04:40,280
‫a przepływ wykonywania, który wcześniej przepływał, zawiera amunicję, teraz przechodzi bezpośrednio do naszej instrukcji branch,

67
00:04:40,280 --> 00:04:47,090
‫co jest dokładnie tym, czego teraz chcemy. ammo zostanie uruchomione, gdy tylko uruchomiona

68
00:04:47,090 --> 00:04:51,740
‫zostanie instrukcja branch w celu uzyskania wartości zwracanej.

69
00:04:51,860 --> 00:05:00,230
‫Teraz słowo ostrzeżenia używaj tego czystego pola wyboru tylko wtedy, gdy masz pewność, że funkcja nie ma skutków ubocznych.

70
00:05:00,590 --> 00:05:08,120
‫Typowe przypadki i przypadki użycia to takie, w których twoja funkcja próbuje po prostu obliczyć wartość, taką

71
00:05:08,120 --> 00:05:09,140
‫jak amunicja.

72
00:05:09,260 --> 00:05:17,450
‫I dlatego ta funkcja nie jest zgodna z konwencją nazywania czasowników, ponieważ czegoś nie

73
00:05:17,450 --> 00:05:21,920
‫robi, otrzymuje coś lub odpowiada na pytanie.

74
00:05:21,920 --> 00:05:24,500
‫W tym przypadku pytanie brzmi, czy ma amunicję.

75
00:05:24,740 --> 00:05:29,420
‫W rzeczywistości moglibyśmy nawet postawić mały znak zapytania w naszej funkcji, nazywając coś, co można

76
00:05:29,420 --> 00:05:35,330
‫zrobić w Blueprint, a czego nie można zrobić w C++, co pozwala nam zobaczyć, że tak, ta funkcja odpowiada

77
00:05:35,330 --> 00:05:36,020
‫na pytanie.

78
00:05:36,020 --> 00:05:37,790
‫Nie próbuje czegoś zrobić.

79
00:05:37,790 --> 00:05:44,210
‫Tak często rozróżnienie między czystymi i nieczystymi funkcjami polega na tym, czy pasuje do

80
00:05:44,210 --> 00:05:46,430
‫czasownika, czy do pytania.

81
00:05:46,460 --> 00:05:48,920
‫Aby przejrzeć, zajrzyjmy do naszego glosariusza.

82
00:05:49,370 --> 00:05:56,420
‫Efekt uboczny to obserwowalny efekt funkcji, którą widzieliśmy i widzieliśmy przykłady tych funkcji.

83
00:05:56,780 --> 00:06:03,950
‫A czysta funkcja to funkcja bez skutków ubocznych, takich jak funkcje pobierania lub odpowiedzi

84
00:06:03,950 --> 00:06:05,000
‫na pytania.

85
00:06:05,480 --> 00:06:06,560
‫To tyle na ten wykład.

86
00:06:06,650 --> 00:06:07,850
‫Zobaczę w następnym.

