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