Criando funções em Clojure

Gilmar Soares
Training Center

--

Bom, vamos lá para o segundo artigo como prometido e como meta pessoal de aprender Clojure e compartilhar o que tenho aprendido.

O próximo passo dos artigos que estou escrevendo é como criar nossas próprias funções, pretendo fazer um próximo artigo mostrando algumas funções já existentes em Clojure, facilitando muito o dia dia do desenvolvimento.

Como já sabem, pois descrevi no primeiro artigo, vamos utilizar o repl do Clojure.

Então teremos algo assim:

➜ ~ lein repl
nREPL server started on port 50223 on host 127.0.0.1 — nrepl://127.0.0.1:50223
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_121-b13
Docs: (doc function-name-here)
(find-doc “part-of-name-here”)
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
Results: Stored in vars *1, *2, *3, an exception in *e

user=>

Podemos relembrar, a criação de um hello world :

user=> (println “Hello World”)
Hello World
nil
user=> (println “Hello” “World”)
Hello World
nil
user=>

Criando uma função em Clojure

Bom, la vamos nós criar funções, e claro vou aproveitar e criar uma função hello-world aproveitando que já fizemos um exemplo com a função println acima.

Bom, abaixo criei uma função hello-world que não faz nada além de imprimir nosso famoso Hello World mas podemos entender como funciona declarações para seguir em frente:

user=> (defn hello-world []
#_=> (println “Hello World”))
#’user/hello-world
user=> (hello-world)
Hello World
nil
user=>

Para criarmos funções em Clojure ou definirmos, vamos usar uma outra função chamada defn.Em Python e Ruby tudo é objeto, aqui em Clojure quase tudo é função. A função defn espera parâmetros, como nossas próprias funções esperam ou não.

Como podemos ver na declaração da função hello-world nós usamos a função defn depois passamos o primeiro parâmetro que é o nome da nossa função, após isso passamos o parâmetro [], que é a lista de parâmetros que nossa função hello-world receberia caso necessário, como não vamos receber nenhum parâmetro, é uma lista vazia.
Por fim a implementação, que novamente usamos outra função chamada println que recebe como parâmetro uma String Hello World.

Vamos criar uma função que receba parâmetros para que fique claro o que é aquela lista estranha no meio da declaração.

user=> (defn hello-world [name]
#_=> (println “Hello” name))
#’user/hello-world
user=> (hello-world “Gilmar”)
Hello Gilmar
nil
user=>

Acho que assim fica claro como funcionam parâmetros em Clojure, é basicamente uma lista, e um detalhe importante, não precisamos de , para separar itens de uma lista, apenas de espaço.

Um pouco do que ainda veremos sobre funções em Clojure

Vou mostrar só mais um exemplo de funções e continuar nos próximos artigos onde vou mostrar as funções existentes no Clojure.

A próxima função que vou mostrar é uma soma simples, vamos lá:

user=> (defn soma [x y]
#_=> (+ x y))
#’user/soma
user=> (soma 1 2)
3
user=> (soma 10 20)
30
user=>

Acima criei uma função soma que recebe apenas 2 parâmetros e soma os mesmos. Usei uma outra função do Clojure que é + essa é a função que faz soma.
Depois temos dois exemplos, somando 1 e 2 depois somando 10 e 20.
Como estamos falando em funções, vou mostrar que a função + é recursiva e podemos passar N números para somarmos.

user=> (+ 1 2 3 4 5 6 7 9 8 7)
52

Novamente para lembrar, não precisamos separar itens por virgula, apenas chamamos a função e passamos os parâmetros.

Acredito que por hoje é só, não quero deixar os artigos extensos e muito menos chatos…

Se me derem feedback positivo ou negativo me ajudam muito a continuar ou não rsrs…

Exemplo no repositório github.

Abraços!!!

--

--