Comparando o Clojure com outras linguagens de programação

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: