Conteúdo
Funções
O que são?
Imagine que você queira executar uma atividade, como, por exemplo, fazer um miojo (grande salvador dos dias da preguiça). Um passo a passo simples para isso seria: pegar o alimento, cozinhar e servir, certo? Nesse fluxo, não há preocupação em como cada passo será feito, mas sabe-se que para conseguir o resultado desejado essas etapas devem ser feitas.
Essa abstração do que está sendo feito em detalhes é exatamente o que uma função faz. Ou seja, dada uma certa entrada (podendo ser nenhuma), executa-se ações que levam a um resultado desejado, podendo ou não ter saídas.
Utilizar funções facilita muito o dia a dia de quem desenvolve, pois com elas conseguimos:
Quebrar problemas grandes em problemas menores
Tornar o código mais fácil de entender
Reutilizar código
Por isso, use e abuse sempre que possível, e fizer sentido, de funções \o/
Exemplo: função soma
package main
import (
"fmt"
)
func main() {
s := Soma(2,3)
fmt.Println(s)
}
// Soma recebe dois números inteiros positivos (entradas), realiza sua
//soma (ações) e retorna o resultado (saída).
func Soma(a int, b int) int {
return a + b
}Sintaxe:
No exemplo acima, tivemos contato com a sintaxe de Go para declaração de funções, onde:
func representa a palavra chave para iniciar declaração de função
Soma é o nome da função, obedece a máxima de quando iniciar com maiúscula é visível fora do
package, e com minúscula apenas dentro(a int, b int) são os parâmetros, as entradas da função, que seguem a sintaxe <nome> <tipo>, sempre separados por vírgula dentro do parênteses
int representa o tipo do retorno
{}, as chaves, são utilizadas para definir o escopo da função, onde ela começa e termina
return, é a palavra chave que utilizamos para retornar as saídas quando existe um retorno declarado
Tendo em mente essa sintaxe, aprofundaremos a seguir nos argumentos, e em seguida no retorno
Parâmetros de uma função em Go
Conforme dito anteriormente, os parâmetros da função são declarados logo após do nome na sintaxe para declaração de funções, e cada parâmetro por padrão segue a convenção <nome> <tipo>, sempre separados por vírgula dentro dos parênteses.
O que ainda não foi dito é que Go nos dá um açúcar sintático para facilitar nossa vida quando temos variáveis de um mesmo tipo. Dessa forma, o cabeçalho do exemplo anterior mudaria:
De:
func Soma(a int, b int) int { }Para:
func Soma(a, b int) int { }
Além disso, como um recurso poderosíssimo da linguagem, temos ponteiros entre os tipos, o que nos proporciona a possibilidade de trabalhar com o próprio valor recebido como argumento da função, e não uma cópia.
Ponteiros
Mencionamos ponteiros no parágrafo anterior. Esse é um assunto para outro momento mas, caso queira saber mais já, você pode ler nesse link aqui.
Exemplo: funções SomaDoisPonteiro e SomaDois
Retornos de uma função em Go
Talvez você não tenha reparado, mas nossa função Soma() não obedece à regra de negócio estipulada a ela. Afinal, podemos passar números negativos como argumentos, e não recebemos nenhum erro sobre isso.
Dessa forma, passarems a fazer essa validação, e nossa função ficará assim:
error é uma interface, para saber mais visite esse link aqui (em inglês)
Como é possível perceber no código acima, em Go temos a possibilIdade de ter mais de uma saída de uma função, obedecendo uma sintaxe parecida com a de entradas.
Inclusive, esse é um “padrão” muito importante e bem comum de se ver no mundo Go para tratamento de erros.
Bônus: funções variádicas
Nossa função Soma() já tem um resultado muito bom e conciso, mas pra ficar melhor ainda queremos poder somar qualquer quantidade de números, não apenas dois como viemos fazendo. E isso é possível com um recurso poderosíssimo, as chamadas funções variádicas, presentes em Go e em outras linguagens.
Com esse recurso, conseguimos receber um número qualquer de argumentos de um dado tipo, na forma de um iterável. Vejamos o exemplo a seguir com nossa função Soma() refatorada, em um caso de erro e um caso de sucesso.
Outra forma de utilizar esse recurso é adicionando ... após um conjunto de elementos, como no argumento passado para a função Soma() no exemplo abaixo:
Last updated