Clojure: tipos de dados

Lucas Oliveira
April 25th, 2020 · 1 min read

Esse é o primeiro texto daquela série que havia comentado do post anterior. Vou documentar o que aprendi e espero que seja útil para alguém.

Antes de falarmos de tipos, faz sentido começar com como definimos variáveis, funções e tudo mais. A palavra reservada para essa ação é a def. Ela cria o binding (perceba, binding e não atribuição) daquela variável. Agora temos o necessário para seguir.

Tipagem

Acho interessante começar comentando que clojure é uma linguagem de tipagem dinâmica ou seja, ela infere a tipagem de acordo com o dado que recebe. Exemplos:

1user=> (def um-numero 666)
2#'user/um-numero
3
4user=> (type um-numero)
5//java.lang.Long
6
7
8user=> (def uma-string "bavaria > budweiser")
9#'user/uma-string
10
11user=> (type uma-string)
12//java.lang.String

Clojure também tem tipagem forte, ou seja, o compilador não permitirá e nem fará procedimentos para que operações com tipos diferentes de dados aconteçam. Acho que o exemplo mais simples é tentar somar uma string e um número.

1user=> (+ 2 "11111")
2Execution error (ClassCastException) at user/eval2023 (REPL:1).
3class java.lang.String cannot be cast to class java.lang.Number (java.lang.String and java.lang.Number are in module java.base of loader 'bootstrap')

Tipagem forte é um dos pontos que durante meus anos codando variei entre gostar e não gostar. Hoje gosto bastante. Codar em uma linguagem de tipagem forte teria me poupado várias horas de dores de cabeça (alô php) e inconsistências (alô javascript).

Se compararmos o comportamento da mesma operação porém em linguagens de tipagem fraca, o problema fica bem evidente:

1//php
2print(2 + "1111111");
3// 1111113
1//js
2console.log(2 + "1111111");
3// 21111111

Tipos em Clojure

Clojure conta com três tipos numéricos, sendo eles: inteiros, decimais e racionais. Também há Strings, Booleans, Nil e Keywords. Acho que faz sentido dizer também que clojure consegue usar os tipos disponíveis na hosted language (que por padrão é java mas poderíamos ser javascript ou .net).

Acredito que por ora seja isso. Espero complementar esse artigo com mais detalhes futuramente. Um componente para o terminal também seria bem legal.


Abraços~

More articles from Lucas Oliveira

É férias que fala, né?

Aqui vou escrever um pouco sobre o que espero estudar e fazer durante as férias.

April 24th, 2020 · 1 min read

5 motivos que me levaram a escrever

Esses são alguns dos motivos que me fizeram procurar formas de me expressar de forma mais clara.

March 2nd, 2020 · 2 min read