Criando funções em Clojure
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 *euser=>
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.
- Hello World;
- Utilizando função existentes do Clojure;
- Criar projeto Clojure;
- Ver como criamos funções e como podemos reutilizar em nosso projetos;
- Criar projeto web;
- Utilizar Classes Java em funções Clojure;
- e mais…
Abraços!!!