Clojure - Criando nossa primeira função
Tags: clojure, functional, beginners, braziliandevs
Published: 2022-02-09 17:26:29

Anteriormente vimos como configurar o ambiente e em seguida escrevemos nossas primeiras linhas de código para começarmos a entender como o Clojure funciona, usamos algumas funções "nativas", declaramos algumas "variáveis" e também brincamos com um vetor.

Nesse post daremos mais um passo, escreveremos nossa primeira função, passando por algumas de suas características e entendendo um pouco sobre como a criação delas funciona.

## Definindo nossa primeira função

Para criar nossa primeira função precisamos ter em mente que o que deve ser feito é algo semelhante a definição de uma variável, a diferença fica por conta do uso do comando "defn" (é possível usar o "def", mas veremos isso futuramente), basicamente precisaremos:

- Escrever todo o conteúdo dentro de parênteses;
- Usar o comando "defn";
- Definir uma lista de parâmetros, se não existirem parâmetros (nosso caso agora) essa lista deve estar vazia;
- Definir o corpo da função;
- Opcionalmente podemos colocar um comentário para deixar mais claro o que a função faz;

Definindo nossa função:

```
(defn minha-primeira-funcao
  "Exemplo de uma função"
  []
  (println "Minha primeira função!")
)

```
Executando nossa função:

```
(minha-primeira-funcao)
```

![Criando nossa primeira função!](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twyra48854iybxuxa8ci.png)

Na imagem acima temos:

- Na linha três temos o inicio da definição de nossa função com o uso de "defn" seguido do nome que escolhemos;
- Na linha quatro, entre aspas duplas, temos o comentário que explica o que a função faz;
- Na linha cinco temos o vetor de parâmetros vazio;
- Na linha seis temos o corpo de nossa função, que realiza a impressão no console de uma frase;
- Na linha sete temos o fechamento de nossa função;
- Na linha nove executamos a nossa função;
- Na linha dez temos o resultado da execução e na onze o retorno;

Apenas um detalhe, a função toda foi escrita no bloco de notas, e depois copiada para o console para a execução.

## Criando uma função que recebe parâmetros e devolve um valor

De acordo com nosso exemplo anterior, para criarmos uma função que receba parâmetros basta declara-los no vetor que tem essa responsabilidade, agora para retornar um valor basta construirmos uma instrução que retorne um valor.

Para nosso segundo exemplo criaremos uma função que calculará e retornará a média de um aluno com base em duas notas:

```
(defn calcula-media
  "Calculando a media de duas notas"
  [nota1, nota2]
  (/ (+ nota1 nota2) 2)
)

```
Executando nossa segunda função:

```
(calcula-media 7M 8M)
```


![Função que calcula a média de duas notas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/moghpasrl4jqhd68whv6.png)

Na imagem acima temos:

- Da linha três a linha sete temos a definição de nossa função, destaque para a linha cinco onde temos a definição de dois parâmetros (nossas duas notas) e para a linha seis, onde de fato realizamos o cálculo e por consequência o retorno da média, analisando de "dentro" para "fora" temos a soma das notas e depois a divisão por dois;
- Na linha nove temos a execução da função de média, onde informamos as duas notas, a "letra M" colocada junto do valor das notas é apenas para termos um resultado mais amigável, a frente entenderemos melhor a questão de tipos de dados;
- E na linha dez temos o resultado apresentado, a média calculada;

## Conclusão

Nesse post escrevemos nossas duas primeiras funções e entendemos como passar parâmetros e devolver um resultado.

## Saiba mais

- [Clojure](https://clojure.org/)
- [Learn Clojure - Functions](https://clojure.org/guides/learn/functions)
- [Escrito originalmente aqui](https://programero.blogspot.com/2022/02/clojure-criando-nossa-primeira-funcao.html)