Aula 54
Como Retornar uma Função de Funções na Linguagem Golang
Summary
Resumo da Aula
Nesta aula, aprendemos sobre como uma função pode retornar outra função em Go. Vamos percorrer os principais pontos abordados.
Função Básica de Cumprimento
- Definição da Função: Começamos criando uma função simples chamada
cumprimentar
, que recebe o nome de uma pessoa como argumento e retorna uma string formatada. - Exemplo de Uso: Se o nome for "João", a função deve retornar "Olá, João!".
- Formatando a String: Utilizamos
fmt.Sprintf
para formatar a string em vez de concatenar manualmente. Essa abordagem é mais limpa e legível.
func cumprimentar(nome string) string {
return fmt.Sprintf("Olá, %s!", nome)
}
Função que Retorna outra Função
- Alteração na Função: Mudamos a função
cumprimentar
para que ela retorne uma função em vez de uma string diretamente. - Closure: A nova função retornada pode ser chamada a qualquer momento e ainda mantém o contexto do nome passado inicialmente.
func cumprimentar(nome string) func() string {
return func() string {
return fmt.Sprintf("Olá, %s!", nome)
}
}
Exemplo de Uso
- Armazenando o Retorno: Quando chamamos
cumprimentar("João")
, armazenamos a função retornada emcumprimentarJoão
. - Chamando a Função: Chamamos
cumprimentarJoão()
para obter "Olá, João!". Essa função pode ser chamada várias vezes sem a necessidade de passar o nome novamente.
cumprimentarJoão := cumprimentar("João")
fmt.Println(cumprimentarJoão()) // "Olá, João!"
- Possibilidade de Uso com Outros Nomes: Você pode fazer o mesmo para outras pessoas, por exemplo,
cumprimentarMaria
.
Conclusão
A aula foi concluída, destacando o uso de closures em funções e a flexibilidade que isso traz para a programação em Go. Até a próxima!
Video Transcript
Nesta aula vamos aprender sobre o retorno de funções de uma função.
Nós vamos aprender que uma função pode também retornar outra função.
Então vamos começar.
Primeiro vamos definir uma função bem básica que vai ter com o argumento o nome de uma pessoa.
O valor retornado pela função será um comprimento ou a saída oução o lá vírgula,
espaço, o nome da pessoa, seguido de um ponto de exclamação.
Então vamos primeiro definir essa função, vou chamar fã, cumprimentar, a ou saudar.
A entrada vai ser uma string, o nome da pessoa com tipo string.
O retorno será também string.
A gente vai retornar o que?
Por exemplo, se o nome for João, queremos retornar o lá João, dessa string aqui com o nome substituído.
Para poder fazer isso, eu poderia fazer o seguinte, eu poderia concatenar o lá vírgula,
vírgula, espaço, mais, o nome, mais, o sinal de exclamação.
Funcionaria também.
Aqui do meio eu chamo a função cumprimentar com o nome que é João.
Esse valor de retorno vamos usar o fm t.println para poder imprimir o console.
Go run fm values 3.go aqui no terminal.
A gente...
Alve tem o lá João com o que a gente esperava.
De outra maneira também de você formatar essa string aqui, e eu vou te mostrar, você pode usar o fm t.sprintf.
Sprintf é uma função que você pode usar para formatar uma string usando variáveis,
e você pode armazenar uma variável ou retornar de uma função.
Nesse caso, por exemplo, o lá vírgula por cento s e o sinal de exclamação.
Por cento s será substituído com um valor do nome que depois da vírgula.
Então, tem essa string com formato aqui, o lá vírgula, espaço.
Por cento s, que corresponde a um string, nesse caso corresponde ao nome que aparece aqui depois da vírgula, tá?
Em ordem sempre, as siglas do sinal de exclamação também vão funcionar da mesma maneira.
Então, esse é o sprintf.
Em vez de imprimir o console, ele só formata uma string da maneira que você quiser e retorna outro string,
com os valores substituídos, tá?
Bem, a gente entende essa função. Bem simples, uma função que leva um string e como sair um outro string.
Eu queria mudar essa função da seguinte maneira.
Eu queria fazer o seguinte, em vez de quando eu chamar a cumprimentar João,
em vez de já me dar esse olá, eu quero que me dê uma função e essa função retornada pelo cumprimentar,
que eu posso chamar qualquer número de vezes para poder obter a mensagem olá, João.
Então, vai ser o seguinte, o cumprimentar agora vai retornar uma função.
Então, essa função aqui é que vai fazer o olá no seu que, tá?
Então, vamos ver aqui.
Então, antes de tudo, vamos no meio para te mostrar o que a gente quer fazer.
A gente quer fazer o seguinte.
Primeiro, a gente quer criar uma função chamada cumprimentar João e essa aqui vai ser a chamada de cumprimentar com o João.
Quando você chamar cumprimentar passando João como argumento, ele vai retornar uma função aqui.
Essa função será armazenada na variável cumprimentar João
e aqui a gente pode chamar essa variável aqui como se fosse uma função cumprimentar João, tá?
E ele retornaria o olá João da mesma maneira de anterior e ele dava o print além disso.
Como fazer isso? Então, do cumprimentar agora, tem que retornar uma função.
Então, eu vou comentar essa parte aqui.
Eu vou até remover, deixa eu remover isso.
Vou recortar só a parte do fmt aqui.
Então, agora cumprimentar tem que retornar uma função.
Então, a gente vai falar return, tá?
Função.
Agora, qual argumento aqui?
Não, nesse caso aqui não tem argumento.
Você olha que a função retornada não tem nenhum argumento.
E vai retornar um string.
Vamos definir o corpo da função.
Função bem simples, só retornar fmt, sprintf, falar meu nome.
Agora, olha a diferença aqui.
Quando você chamar cumprimentar com João, ele vai chamar essa função.
João vai ser nome e a função vai retornar outra função.
A definição dessa função aqui, que não tem nenhuma entrada, mas tem a saída string.
E essa função aqui, quando você chamar, não esqueça que essa chamada aqui não chama a função de dentro.
Só chama a função de fora, que é cumprimentar, que retorna a função.
Então, essa função aqui será armazenada na variável cumprimentar João.
Agora, linha 15, finalmente, chama cumprimentar João, olha os parênteses.
E que vai chamar essa função aqui?
Que finalmente vai dizer fmt, sprintf, ou lá, João, tá?
Porque o nome aqui vai te havendo de cumprimentar pela primeira vez que foi chamada.
Isso foi chamado Closure, né?
Então, nome aqui, tá?
Vai ser o João.
Então, vamos ver.
Vamos testar.
Opa, deu problema.
Vamos ver aqui.
O que aqui deu.
Não pode usar funk literal, como tipo string, no valor de retorno.
Linha 7.
E cumprimentar João foi indefinido, linha 15.
Vamos ver.
Cumprimentar.
Será que eu errei?
Então, primeiro, vamos resolver o primeiro problema.
Então, acho que o funk, porque não tem nenhum argumento de entrada, eu devo remover os parênteses.
Vamos ver.
Agora, tá errando unexpected string.
Vamos ver aqui.
Ah, eu sei o que é o problema.
Desculpe.
Então, olha aqui o valor de retorno.
Esse cara aqui, do cumprimentar, é uma função.
Mas, eu tenho na assinatura do cumprimentar, o valor de retorno é um string, mas tá errado.
Isso era anteriormente.
Agora, o valor de retorno é uma função.
Então, vamos consertar isso.
O que aqui a gente deve escrever aqui no valor da saída, no valor de retorno do tipo do cumprimentar?
É uma função, né?
Então, vamos escrever lá.
Função tá com algum argumento e retorno que?
Um, um string, tá?
Vamos testar.
Isso não tem nenhum problema.
Legal aquele erro que se foi.
Agora, só tem indefinido linhas 13 e 15.
Cumprimentar de vão está indefinido.
Ah, mais outro erro de sintaxi.
Se eu não desevar, eu tenho que botar o que é ali, antes do igual.
Os dois pontos, tá?
Então, vou exercício pra divulgar.
Vamos lá.
Finalmente, funcionou.
Olá, João.
No último, você pode chamar cumprimentar João várias vezes e sempre vai dar.
Olá, João.
Não precisa passar o João de novo, tá?
A mesma maneira, você poderia fazer pra outra pessoa, por exemplo, cumprimentar Maria.
Ah, poderia chamar cumprimentar com Maria e retornar a função.
Essa função chamada cumprimentar Maria quando chamada retorna o la vírgula espaço Maria exclamação.
Tá certo?
Então, por essa aula só e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: