Aula 16 - Tutorial Golang - Closure

Página principal do blog

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:

Hostinger

Digital Ocean

One.com

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

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 principal do blog

página do Código Fluente no Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado e bons estudos. ;)