Aula 16 - Tutorial Golang - Closure
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
Código final da aula:
Toti:
Backing track / Play-along:
Código Fluente
Putz!
Aula 16 - Tutorial Golang - Closure
Closure
Go oferece suporte a funções anônimas, que podem formar
closures.
As funções anônimas são úteis quando você deseja definir uma função embutida sem precisar nomeá-la, você pode atribuir a uma variável, independentemente de haver um nome para a
função.
Podemos passá-la como se fosse um objeto qualquer, que você pode atribuir a uma variável.
Esta função
intSeq() retorna outra função que definimos anonimamente no corpo de
intSeq().
A função retornada
soma 1 variável
i, a cada vez que é chamada, a função anônima, ou seja, a
closure, é a parte em
azul no código abaixo.
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
A gente chama a
intSeq(), atribuindo o resultado (
uma função) a variável
nextInt.
nextInt := intSeq()
Este valor de função captura seu próprio valor de
i, que será atualizado cada vez que chamarmos
nextInt().
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
Saída:
nextInt chamada 1
nextInt chamada 2
nextInt chamada 3
Para confirmar que o estado é exclusivo para aquela função específica, crie e teste um novo em uma nova variável chamada
newInts.
newInts := intSeq()
fmt.Println("newInts chamada", newInts())
Saída:
newInts chamada 1
Na próxima aula veremos o último recurso de funções que é a
recursão.
Código completo
package main
import "fmt"
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println()
newInts := intSeq()
fmt.Println("newInts chamada", newInts())
}
E pra executar é só entrar na pasta onde tá o arquivo closure.go e digitar:
go run closure.go
É isso pessoal, fico por aqui.
página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Obrigado e bons estudos. ;)