Aula 16 – Tutorial Golang – Closure

Aula 16 – Tutorial Golang – Closure

Tutorial Golang - Closure

Tutorial Golang – Closure

Página principal do blog

Todas as aulas desse curso

Aula 15                        Aula 17

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

Na próxima aula veremos o último recurso de funções que é a recursão.

É isso pessoal, fico por aqui.

Nos vemos na próxima aula, até mais. 🙂

Página principal do blog

Todas as aulas desse curso

Aula 15                        Aula 17

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. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>