Menu
Coddy logo textTech

Funções Anônimas

Lição 9 de 19 do curso Funções e Ponteiros em Golang da Coddy.

O que já aprendemos é como definir uma função com um nome e, quando precisamos chamá-la, usamos esse nome. No entanto, existe outro tipo de função sem nomes, e chamamos esse tipo de função anônima.

Ela age exatamente como uma função simples, mas com algumas diferenças em como funciona. Essas funções nos permitem definir ações diretamente sem a necessidade de definir uma função em outro lugar.

Vamos ver um exemplo de como definir uma função anônima:

b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))

Aqui definimos uma variável b que armazena uma função anônima que realiza a subtração. Quando chamamos a função, simplesmente usamos o nome da variável b(100, 50).

Também podemos receber uma função anônima como resultado de outra função. Por exemplo:

func operation(a int) func(int) int {
    if a == 1 {
        return func(a int) int { return a + 10 }
    } else {
        return func(a int) int { return a * 10 }
    }
}
func main() {
    b := operation(1)
    fmt.Println(b(14))
}

Aqui definimos uma função regular chamada operation, e o resultado (o valor retornado) será uma função anônima <strong>func(int) int</strong> em vez de um valor simples.

Atribuímos o valor de retorno a uma variável b. Como passamos 1 como parâmetro para a função operation, o bloco que será executado é este:

return func(a int) int { return a + 10 }

Agora, quando chamamos nossa função anônima b, precisamos passar um valor inteiro, por exemplo, 14.

O resultado será:

24

Este é o cálculo de a + 10 onde passamos a que é 14(<strong>b(14)</strong>).
 

challenge icon

Desafio

Fácil

Escreva uma função anônima que receba três argumentos inteiros.

Se o primeiro argumento for maior que o último deles, retorne a soma de todos os argumentos. Caso contrário, retorne a multiplicação do primeiro e do último argumento.

Armazene o resultado da função dentro de uma variável chamada result.

Experimente você mesmo

package main

import "fmt"

func main() {
    // Define a função anônima e a atribui a uma variável chamada "result".
 
    
    
    // Imprime o resultado Não mude isso!
    fmt.Println("Result:", result(2, 3, 4))
    fmt.Println("Result:", result(8, 3, 4))
}

Todas as lições de Funções e Ponteiros em Golang