‫Olá e bem-vindo.
‫Nesta palestra, vamos aprender como podemos remover pinos de execução de nossas próprias funções e
‫como e quando é uma boa ideia fazer isso.
‫Vamos mergulhar.
‫Então é um pouco estranho que nossa função tem munição agora tenha pinos de execução quando anteriormente não precisávamos
‫disso e isso meio que tornou nosso código um pouco pior.
‫Então o que é isso?
‫Por que isso aconteceu?
‫E por que alguns nós de função exigem pinos de execução e outros não?
‫Bem, tudo se resume a algo chamado efeito colateral.
‫Então, o que é um efeito colateral?
‫Essencialmente, um efeito colateral é quando uma função tem algum tipo de efeito observável depois de ser
‫executada.
‫Agora, o que quero dizer com isso?
‫Vamos dar uma olhada em alguns exemplos de funções com efeitos colaterais para que você possa entender
‫imprime a string de impressão depois de ter executado.
‫Print string é bastante claro que algo aconteceu porque agora há uma string na tela.
‫Você pode ver que há um impulso de adição de corda que claramente tem um efeito observável
‫porque de repente a coisa que você adicionou impulso sai voando para a distância definida a munição não
‫tem efeito observável porque depois de definir a munição, o valor nessa variável mudou.
‫Agora, neste ponto, você pode estar se perguntando, bem, certamente toda função tem um efeito observável.
‫Caso contrário, qual é o sentido disso?
‫Bem, não exatamente.
‫Existem coisas como funções puras.
‫O que é uma função pura é basicamente uma função sem efeitos colaterais.
‫No entanto, ele tem valores de retorno.
‫Portanto, há valores saindo dessa função.
‫E esse é todo o propósito da função é calcular e nos dar esses valores.
‫Então, novamente, vamos dar uma olhada em alguns exemplos, porque isso tornará muito mais claro.
‫Pegue munição.
‫Essa é uma função pura.
‫Não tem efeitos colaterais porque você pode obter munição quantas vezes quiser.
‫E a menos que você faça algo com o valor que você tirou dele, seu programa, seu jogo
‫não será diferente.
‫Você pode continuar recebendo munição o tempo todo, durante todo o jogo, e nada será
‫observável diferente no seu jogo.
‫Obter vetor de avanço ativo.
‫Esse é outro onde você pode obtê-lo quantas vezes quiser.
‫Não vai mudar nada até que você faça algo com o valor retornado e todas
‫essas funções matemáticas como multiplicar menos maior.
‫Todos esses nós não têm efeito em seu projeto até que seus resultados sejam usados para algum propósito
‫maior.
‫Então, essas são chamadas de funções puras, e você provavelmente pode ver que esses são exatamente os nós
‫que não têm pinos de execução porque não precisam deles.
‫Não importa quando eu corro para pegar munição ou se eu corro 50 vezes de uma vez, não
‫vai importar porque não tem efeitos colaterais observáveis.
‫Então, como podemos indicar um modelo de que uma função é pura?
‫Bem, vamos dar uma olhada na minha função de teste aqui.
‫Então, vou selecioná-lo no gráfico de eventos ou no painel do meu projeto.
‫E você pode ver que no painel de detalhes há uma caixa de seleção rotulada como puro.
‫Então, se você marcar essa caixa de seleção, observe que os padrões de execução simplesmente desapareceram.
‫E tudo o que temos agora são as entradas e saídas desta função.
‫Agora esta função será executada sempre que precisarmos da saída.
‫Portanto, se eu conectar essa saída a uma string de impressão, ela executará essa função antes da string de
‫impressão.
‫Assim tem o resultado na hora de executar a string de impressão.
‫Podemos fazer o mesmo com qualquer função onde não haja efeitos colaterais, onde não
‫haja efeitos observáveis, como a nossa função de munição.
‫Então eu gostaria de desafiá-lo a transformar munição em uma função pura.
‫Portanto, selecione-o e defina essa caixa de seleção para torná-lo puro.
‫E o que acontece com o fluxo de execução agora.
‫O que atualmente foi ligado através da função.
‫Onde isso vai?
‫Pause o vídeo e vá em frente.
‫OK.
‫Bem vindo de volta.
‫Então, vamos selecionar tem munição, vamos marcar a caixa de seleção pura e instantaneamente você verá que os pinos
‫de execução desaparecem e o fluxo de execução que anteriormente fluiu tem munição agora está indo diretamente para nossa
‫declaração de ramificação, que é exatamente o que queremos agora tem A munição será executada assim que
‫a instrução branch for executada para obter o valor de retorno.
‫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.
‫Casos comuns e casos de uso para isso são quando sua função está simplesmente tentando calcular um valor como
‫tem munição.
‫E é por isso que esta função não segue a convenção de ter um verbo nomeando porque não está fazendo
‫algo, está recebendo algo ou está respondendo a uma pergunta.
‫Neste caso, a questão é tem munição.
‫E de fato, poderíamos até colocar um pequeno ponto de interrogação em nossa função, nomeando algo que
‫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
‫uma pergunta.
‫Não está tentando fazer algo.
‫Muitas vezes a distinção entre funções puras e não puras é se ela se encaixa com um verbo ou se
‫ela se encaixa com uma pergunta.
‫Então, para revisar, vamos dar uma olhada no nosso glossário.
‫Um efeito colateral é um efeito observável de uma função que vimos e vimos exemplos dessas funções.
‫E uma função pura é uma função sem efeitos colaterais, como essas funções de obtenção ou funções de resposta
‫a perguntas.
‫Isso é tudo para esta palestra.
‫Verei no próximo.