Comparando o Clojure com outras linguagens de programação

Guilherme Lima
Guilherme Lima

Compartilhe

muitas linhas de código coloridas

Clojure: O que é?

Clojure é uma linguagem de programação que combina a acessibilidade e o desenvolvimento interativo de uma linguagem de script com uma infraestrutura eficiente e robusta para programação em multi-thread, ou seja, é possível executar várias tarefas de maneira paralela.

É compilada, mas permanece completamente dinâmica - todos os recursos são suportados em tempo de execução. Também podemos falar em Clojure como um dialeto do Lisp, pois compartilha da filosofia code-as-data (código como dados).

Ela é predominantemente uma linguagem funcional e apresenta um rico conjunto de estruturas de dados persistentes e imutáveis.

O criador, Richard Hickey, já havia trabalhado anteriormente em três outros projetos que tentavam trazer a linguagem LISP para a JVM ou o .NET. Esses experimentos passados possibilitaram o equilíbrio da linguagem LISP e da JVM para o Clojure.

O que vamos comparar?

Durante a segunda edição da Imersão Dev foi criado um projeto em Javascript de conversão de moedas. O programa pedia ao usuário para entrar com um valor em dólar e exibia a conversão da moeda em real.

Para visualizar esse projeto, segue o link abaixo:

Vamos analisar o código completo feito em Javascript:

var valorEmDolarTexto = prompt("Qual o valor em dólar que você quer converter?")
var valorEmDolarNumero = parseFloat(valorEmDolarTexto)
var valorEmReal = valorEmDolarNumero * 5.51 //Valor do dólar no dia da criação do código 
var valorEmRealFixado = valorEmReal.toFixed(2)
alert(valorEmRealFixado)

Esse mesmo código escrito em outra linguagem como Python, por exemplo, ficaria assim:

valor_em_dolar_texto = input('Digite o valor em dólar')
valor_em_dolar_numerico = float(valor_em_dolar_texto)
valor_em_real = valor_em_dolar_numerico * 5.51
valor_em_real_fixado = round(valor_em_real,2)
valor_em_real_fixado

Vamos analisar o que cada linha faz?

Analisando o código

Vamos analisar o que ambos os códigos fazem, linha a linha:

  • Armazena a quantidade de dólares que um usuário deseja converter, porém o valor digitado é tratado como texto. Então precisamos convertê-lo em um número.
  • Converte o valor no formato de texto para um formato numérico, assim podemos realizar operações matemáticas com ele.
  • Armazena o valor convertido em real em uma variável por meio da multiplicação da quantidade de dólares pelo preço do câmbio.
  • Simplifica o valor convertido para real em duas casas decimais.
  • Exibe o valor convertido para o usuário.

Você pode encontrar ambos os códigos nesse link do GitHub.

Hummm…entendi! Mas e no Clojure? Como ficaria um programa seguindo esses mesmos passos?

Conversor de moedas em Clojure

Passo 1 - interagindo com o usuário Para exibir a mensagem "Digite o valor em dolar", vamos usar o comando println do Clojure.

(println "Digite o valor em dolar")

Agora precisamos armazenar o valor digitado em algum lugar. Podemos utilizar a função def para referenciar esse valor. Além disso, queremos que esse valor seja digitado pelo usuário e podemos usar a função read-line, como mostra o código abaixo.

(def valor-em-dolar-texto (read-line))

Passo 2 - Conversão de tipo texto para numérico

Para poder utilizar o valor digitado em contas matemáticas, temos que transformá-lo em um número, e podemos realizar essa conversão usando a função Float/parseFloat, e temos que salvar esse valor em um novo local usando a função def.

(def valor-em-dolar-numerico (Float/parseFloat valor-em-dolar-texto))

Passo 3 - Descobrindo o valor em real

Agora precisamos converter o valor em dólar para o valor em real. Para isso vamos multiplicar a quantidade de dólares, que agora está na forma numérica, pelo preço em reais, e salvar o resultado em um novo local.

(def valor-em-real (* valor-em-dolar-numerico 5.51))

Passo 4 - Simplificando o valor dos centavos para duas casas decimais

Agora que temos o valor convertido para real, podemos ter um problema de formatação, já que a última conta pode ter deixado até 4 casas decimais e o real utiliza apenas 2. Então vamos descartar as últimas casas utilizando a função format e pedir para ter apenas 2 casas decimais através do .2 em ”%.2f”.

(def valor-em-real-fixado (format "%.2f" valor-em-real))

Passo 5 - Exibindo o valor convertido

Para finalizar, vamos exibir o valor em real fixado com a função println passando uma mensagem de texto entre aspas e o valor-em-real-fixado.

(println "Valor em R$ " valor-em-real-fixado)

Código em Clojure completo

(println "Digite o valor em dolar")
(def valor-em-dolar-texto (read-line))
(def valor-em-dolar-numerico (Float/parseFloat valor-em-dolar-texto))
(def valor-em-real (* valor-em-dolar-numerico 5.51))
(def valor-em-real-fixado (format "%.2f" valor-em-real))
(println "Valor em real" valor-em-real-fixado)

Conclusão

Apesar da sintaxe ser diferente de Javascript ou Python, é possível realizar os mesmos passos com esta incrível linguagem de programação funcional.

Quer aprender mais sobre Clojure? Olha esses links que separei: