‫Cześć i witaj.
‫Na tym wykładzie nauczymy się, jak usunąć piny wykonawcze z naszych własnych funkcji
‫oraz jak i kiedy warto to zrobić.
‫Zanurzmy się.
‫Więc to trochę dziwne, że nasza funkcja has ammo ma teraz piny wykonawcze, gdy wcześniej
‫ich nie potrzebowaliśmy, a to trochę pogorszyło nasz kod.
‫Więc co to jest?
‫Dlaczego tak się stało?
‫I dlaczego niektóre węzły funkcji wymagają pinów wykonawczych, a inne nie?
‫Cóż, wszystko sprowadza się do czegoś, co nazywa się efektem ubocznym.
‫Więc jaki jest efekt uboczny?
‫Zasadniczo, efekt uboczny ma miejsce, gdy funkcja ma jakiś obserwowalny efekt po jej uruchomieniu.
‫Co mam przez to na myśli?
‫Przyjrzyjmy się kilku przykładom funkcji z efektami ubocznymi, aby zrozumieć,
‫jak wypisuje ciąg drukowania po uruchomieniu.
‫Print string jest całkiem jasne, że coś się stało, ponieważ na ekranie pojawił się napis.
‫Widać, że istnieje impuls dodawania struny, który wyraźnie daje obserwowalny efekt, ponieważ nagle
‫przedmiot, do którego dodałeś impuls, odlatuje na odległość ustawiona amunicja nie daje obserwowalnego efektu,
‫ponieważ po ustawieniu amunicji wartość w tej zmiennej uległa zmianie.
‫W tym momencie możesz się zastanawiać, cóż, na pewno każda funkcja ma obserwowalny efekt.
‫W przeciwnym razie, jaki to ma sens?
‫Cóż, nie do końca.
‫Są takie rzeczy jak czyste funkcje.
‫Czysta funkcja jest w zasadzie funkcją bez skutków ubocznych.
‫Jednak ma zwracane wartości.
‫Więc są wartości wychodzące z tej funkcji.
‫I to jest cały cel funkcji, aby obliczyć i podać nam te wartości.
‫Więc ponownie, spójrzmy na kilka przykładów, ponieważ dzięki temu będzie to znacznie jaśniejsze.
‫Zdobądź amunicję.
‫To czysta funkcja.
‫Nie ma skutków ubocznych, ponieważ amunicję możesz dostawać tyle razy, ile chcesz.
‫I jeśli nie zrobisz czegoś z wartością, którą z niego wyciągnął, twój program, twoja gra nie
‫będzie się różnić.
‫Możesz po prostu dostawać amunicję przez cały czas, przez całą grę i nic nie
‫będzie zauważalne w twojej grze.
‫Uzyskaj aktywny wektor do przodu.
‫To kolejny, w którym możesz go dostać tyle razy, ile chcesz.
‫Nic się nie zmieni, dopóki nie zrobisz czegoś ze zwróconą wartością i wszystkimi tymi
‫matematycznymi funkcjami, takimi jak pomnóż minus większe.
‫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
‫celu.
‫Nazywa się to czystymi funkcjami i prawdopodobnie widać, że są to dokładnie te węzły, które
‫nie mają żadnych pinów wykonawczych, ponieważ ich nie potrzebują.
‫Nie ma znaczenia, kiedy biegnę po amunicję, czy też uruchamiam 50 razy raz, to nie będzie
‫miało znaczenia, ponieważ nie ma widocznych skutków ubocznych.
‫Jak więc możemy wskazać plan, że funkcja jest czysta?
‫Cóż, spójrzmy tutaj na moją funkcję testową.
‫Więc wybiorę go na wykresie zdarzeń lub w okienku mojego planu.
‫I widać, że w okienku szczegółów znajduje się pole wyboru oznaczone jako czysty.
‫Więc jeśli zaznaczysz to pole wyboru, zauważ, że wzorce wykonywania po prostu zniknęły.
‫A wszystko, co mamy teraz, to wejścia i wyjścia tej funkcji.
‫Teraz ta funkcja zostanie uruchomiona, gdy będziemy potrzebować danych wyjściowych.
‫Więc jeśli podłączę to wyjście do łańcucha drukowania, to uruchomi tę funkcję przed napisem drukowania.
‫Więc ma wynik w czasie do wykonania napisu do drukowania.
‫Możemy zrobić to samo z każdą funkcją, w której nie ma skutków ubocznych, gdzie
‫nie ma widocznych skutków, takich jak nasza funkcja amunicji.
‫Dlatego chciałbym rzucić wyzwanie, aby amunicja stała się czystą funkcją.
‫Wybierz go i ustaw to pole wyboru, aby było czyste.
‫A co dzieje się teraz z przepływem egzekucji.
‫Co aktualnie było podpięte przez funkcję.
‫Dokąd to zmierza?
‫Wstrzymaj wideo i spróbuj.
‫Dobra.
‫Witamy spowrotem.
‫Wybierzmy więc ma amunicję, zaznaczymy czyste pole wyboru i natychmiast zobaczysz, że pinezki wykonania znikają,
‫a przepływ wykonywania, który wcześniej przepływał, zawiera amunicję, teraz przechodzi bezpośrednio do naszej instrukcji branch,
‫co jest dokładnie tym, czego teraz chcemy. ammo zostanie uruchomione, gdy tylko uruchomiona
‫zostanie instrukcja branch w celu uzyskania wartości zwracanej.
‫Teraz słowo ostrzeżenia używaj tego czystego pola wyboru tylko wtedy, gdy masz pewność, że funkcja nie ma skutków ubocznych.
‫Typowe przypadki i przypadki użycia to takie, w których twoja funkcja próbuje po prostu obliczyć wartość, taką
‫jak amunicja.
‫I dlatego ta funkcja nie jest zgodna z konwencją nazywania czasowników, ponieważ czegoś nie
‫robi, otrzymuje coś lub odpowiada na pytanie.
‫W tym przypadku pytanie brzmi, czy ma amunicję.
‫W rzeczywistości moglibyśmy nawet postawić mały znak zapytania w naszej funkcji, nazywając coś, co można
‫zrobić w Blueprint, a czego nie można zrobić w C++, co pozwala nam zobaczyć, że tak, ta funkcja odpowiada
‫na pytanie.
‫Nie próbuje czegoś zrobić.
‫Tak często rozróżnienie między czystymi i nieczystymi funkcjami polega na tym, czy pasuje do
‫czasownika, czy do pytania.
‫Aby przejrzeć, zajrzyjmy do naszego glosariusza.
‫Efekt uboczny to obserwowalny efekt funkcji, którą widzieliśmy i widzieliśmy przykłady tych funkcji.
‫A czysta funkcja to funkcja bez skutków ubocznych, takich jak funkcje pobierania lub odpowiedzi
‫na pytania.
‫To tyle na ten wykład.
‫Zobaczę w następnym.