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á:
24Este é o cálculo de a + 10 onde passamos a que é 14(<strong>b(14)</strong>).
Desafio
FácilEscreva 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
1Introdução
Introdução4Recriando Funções de Strings em Go
Strings em GolangFunção JoinFunção ContainsFunção IndexDesafio de Recapitulação #1