﻿1
00:00:04,330 --> 00:00:05,470
‫Olá e bem-vindo.

2
00:00:05,470 --> 00:00:11,620
‫Nesta palestra, vamos aprender como podemos remover pinos de execução de nossas próprias funções e

3
00:00:11,920 --> 00:00:15,610
‫como e quando é uma boa ideia fazer isso.

4
00:00:15,730 --> 00:00:16,420
‫Vamos mergulhar.

5
00:00:17,050 --> 00:00:23,470
‫Então é um pouco estranho que nossa função tem munição agora tenha pinos de execução quando anteriormente não precisávamos

6
00:00:23,470 --> 00:00:27,400
‫disso e isso meio que tornou nosso código um pouco pior.

7
00:00:27,700 --> 00:00:29,050
‫Então o que é isso?

8
00:00:29,050 --> 00:00:30,190
‫Por que isso aconteceu?

9
00:00:30,190 --> 00:00:35,530
‫E por que alguns nós de função exigem pinos de execução e outros não?

10
00:00:35,740 --> 00:00:39,700
‫Bem, tudo se resume a algo chamado efeito colateral.

11
00:00:39,820 --> 00:00:41,950
‫Então, o que é um efeito colateral?

12
00:00:42,220 --> 00:00:49,480
‫Essencialmente, um efeito colateral é quando uma função tem algum tipo de efeito observável depois de ser

13
00:00:49,480 --> 00:00:49,990
‫executada.

14
00:00:50,470 --> 00:00:52,040
‫Agora, o que quero dizer com isso?

15
00:00:52,060 --> 00:00:56,990
‫Vamos dar uma olhada em alguns exemplos de funções com efeitos colaterais para que você possa entender

16
00:00:57,010 --> 00:00:59,980
‫imprime a string de impressão depois de ter executado.

17
00:00:59,980 --> 00:01:05,830
‫Print string é bastante claro que algo aconteceu porque agora há uma string na tela.

18
00:01:05,830 --> 00:01:12,400
‫Você pode ver que há um impulso de adição de corda que claramente tem um efeito observável

19
00:01:12,400 --> 00:01:19,360
‫porque de repente a coisa que você adicionou impulso sai voando para a distância definida a munição não

20
00:01:19,360 --> 00:01:25,090
‫tem efeito observável porque depois de definir a munição, o valor nessa variável mudou.

21
00:01:25,240 --> 00:01:29,290
‫Agora, neste ponto, você pode estar se perguntando, bem, certamente toda função tem um efeito observável.

22
00:01:29,290 --> 00:01:31,270
‫Caso contrário, qual é o sentido disso?

23
00:01:31,720 --> 00:01:32,710
‫Bem, não exatamente.

24
00:01:32,710 --> 00:01:35,560
‫Existem coisas como funções puras.

25
00:01:35,560 --> 00:01:41,020
‫O que é uma função pura é basicamente uma função sem efeitos colaterais.

26
00:01:41,200 --> 00:01:44,890
‫No entanto, ele tem valores de retorno.

27
00:01:45,130 --> 00:01:47,350
‫Portanto, há valores saindo dessa função.

28
00:01:47,350 --> 00:01:53,650
‫E esse é todo o propósito da função é calcular e nos dar esses valores.

29
00:01:53,890 --> 00:01:57,010
‫Então, novamente, vamos dar uma olhada em alguns exemplos, porque isso tornará muito mais claro.

30
00:01:57,580 --> 00:01:58,420
‫Pegue munição.

31
00:01:58,540 --> 00:02:01,030
‫Essa é uma função pura.

32
00:02:01,030 --> 00:02:06,490
‫Não tem efeitos colaterais porque você pode obter munição quantas vezes quiser.

33
00:02:06,700 --> 00:02:12,910
‫E a menos que você faça algo com o valor que você tirou dele, seu programa, seu jogo

34
00:02:12,910 --> 00:02:14,350
‫não será diferente.

35
00:02:14,350 --> 00:02:20,260
‫Você pode continuar recebendo munição o tempo todo, durante todo o jogo, e nada será

36
00:02:20,260 --> 00:02:22,600
‫observável diferente no seu jogo.

37
00:02:22,750 --> 00:02:24,850
‫Obter vetor de avanço ativo.

38
00:02:24,850 --> 00:02:27,700
‫Esse é outro onde você pode obtê-lo quantas vezes quiser.

39
00:02:27,700 --> 00:02:34,300
‫Não vai mudar nada até que você faça algo com o valor retornado e todas

40
00:02:34,300 --> 00:02:37,660
‫essas funções matemáticas como multiplicar menos maior.

41
00:02:37,930 --> 00:02:46,390
‫Todos esses nós não têm efeito em seu projeto até que seus resultados sejam usados para algum propósito

42
00:02:46,390 --> 00:02:47,110
‫maior.

43
00:02:47,350 --> 00:02:53,230
‫Então, essas são chamadas de funções puras, e você provavelmente pode ver que esses são exatamente os nós

44
00:02:53,230 --> 00:02:56,830
‫que não têm pinos de execução porque não precisam deles.

45
00:02:56,830 --> 00:03:04,300
‫Não importa quando eu corro para pegar munição ou se eu corro 50 vezes de uma vez, não

46
00:03:04,300 --> 00:03:08,080
‫vai importar porque não tem efeitos colaterais observáveis.

47
00:03:08,620 --> 00:03:13,300
‫Então, como podemos indicar um modelo de que uma função é pura?

48
00:03:13,750 --> 00:03:16,120
‫Bem, vamos dar uma olhada na minha função de teste aqui.

49
00:03:16,120 --> 00:03:20,560
‫Então, vou selecioná-lo no gráfico de eventos ou no painel do meu projeto.

50
00:03:21,100 --> 00:03:25,860
‫E você pode ver que no painel de detalhes há uma caixa de seleção rotulada como puro.

51
00:03:25,870 --> 00:03:31,120
‫Então, se você marcar essa caixa de seleção, observe que os padrões de execução simplesmente desapareceram.

52
00:03:31,120 --> 00:03:35,140
‫E tudo o que temos agora são as entradas e saídas desta função.

53
00:03:35,560 --> 00:03:40,060
‫Agora esta função será executada sempre que precisarmos da saída.

54
00:03:40,060 --> 00:03:46,690
‫Portanto, se eu conectar essa saída a uma string de impressão, ela executará essa função antes da string de

55
00:03:46,690 --> 00:03:47,140
‫impressão.

56
00:03:47,260 --> 00:03:51,610
‫Assim tem o resultado na hora de executar a string de impressão.

57
00:03:52,030 --> 00:03:57,640
‫Podemos fazer o mesmo com qualquer função onde não haja efeitos colaterais, onde não

58
00:03:57,640 --> 00:04:01,360
‫haja efeitos observáveis, como a nossa função de munição.

59
00:04:01,420 --> 00:04:06,010
‫Então eu gostaria de desafiá-lo a transformar munição em uma função pura.

60
00:04:06,430 --> 00:04:09,880
‫Portanto, selecione-o e defina essa caixa de seleção para torná-lo puro.

61
00:04:10,450 --> 00:04:14,320
‫E o que acontece com o fluxo de execução agora.

62
00:04:14,320 --> 00:04:17,200
‫O que atualmente foi ligado através da função.

63
00:04:17,470 --> 00:04:18,340
‫Onde isso vai?

64
00:04:18,730 --> 00:04:20,530
‫Pause o vídeo e vá em frente.

65
00:04:23,780 --> 00:04:24,350
‫OK.

66
00:04:24,350 --> 00:04:25,160
‫Bem vindo de volta.

67
00:04:25,460 --> 00:04:32,780
‫Então, vamos selecionar tem munição, vamos marcar a caixa de seleção pura e instantaneamente você verá que os pinos

68
00:04:32,780 --> 00:04:40,280
‫de execução desaparecem e o fluxo de execução que anteriormente fluiu tem munição agora está indo diretamente para nossa

69
00:04:40,280 --> 00:04:47,090
‫declaração de ramificação, que é exatamente o que queremos agora tem A munição será executada assim que

70
00:04:47,090 --> 00:04:51,740
‫a instrução branch for executada para obter o valor de retorno.

71
00:04:51,860 --> 00:05:00,230
‫Agora, uma palavra de cautela só use esta caixa de seleção pura quando tiver certeza de que uma função não tem efeitos colaterais.

72
00:05:00,590 --> 00:05:08,120
‫Casos comuns e casos de uso para isso são quando sua função está simplesmente tentando calcular um valor como

73
00:05:08,120 --> 00:05:09,140
‫tem munição.

74
00:05:09,260 --> 00:05:17,450
‫E é por isso que esta função não segue a convenção de ter um verbo nomeando porque não está fazendo

75
00:05:17,450 --> 00:05:21,920
‫algo, está recebendo algo ou está respondendo a uma pergunta.

76
00:05:21,920 --> 00:05:24,500
‫Neste caso, a questão é tem munição.

77
00:05:24,740 --> 00:05:29,420
‫E de fato, poderíamos até colocar um pequeno ponto de interrogação em nossa função, nomeando algo que

78
00:05:29,420 --> 00:05:35,330
‫você pode fazer em Blueprint que não pode fazer em C++, o que nos permite ver que, sim, essa função está respondendo a

79
00:05:35,330 --> 00:05:36,020
‫uma pergunta.

80
00:05:36,020 --> 00:05:37,790
‫Não está tentando fazer algo.

81
00:05:37,790 --> 00:05:44,210
‫Muitas vezes a distinção entre funções puras e não puras é se ela se encaixa com um verbo ou se

82
00:05:44,210 --> 00:05:46,430
‫ela se encaixa com uma pergunta.

83
00:05:46,460 --> 00:05:48,920
‫Então, para revisar, vamos dar uma olhada no nosso glossário.

84
00:05:49,370 --> 00:05:56,420
‫Um efeito colateral é um efeito observável de uma função que vimos e vimos exemplos dessas funções.

85
00:05:56,780 --> 00:06:03,950
‫E uma função pura é uma função sem efeitos colaterais, como essas funções de obtenção ou funções de resposta

86
00:06:03,950 --> 00:06:05,000
‫a perguntas.

87
00:06:05,480 --> 00:06:06,560
‫Isso é tudo para esta palestra.

88
00:06:06,650 --> 00:06:07,850
‫Verei no próximo.

