Valores simples

  • Strings
  • Booleanos e nil
  • Palavras-chaves
  • Números
    • Aritimética
  • Atribuições: def

Valores simples

Para poder fazer qualquer coisa numa linguagem de programação, precisamos ter valores para poder fazer algo interessante. Em Clojure, valores simples são números, texto, booleanos, nil e chaves.

Strings

O que é uma string? É só um pedaço de texto. Para criar uma string, você coloca algum texto entre aspas. Olhe o último exemplo. Uma barra invertida é como a gente consegue colocar uma aspa dentro de uma string. Não tente usar aspas simples para criar a string.

Referência: String

"Hello, World!"
"Essa é uma string maior que eu escrevi só pra ter um exemplo legal."
"Maria disse: \"Acho que a gente deveria ir no Mica.\""

Booleanos e nil

Um booleano é um valor que é verdadeiro ou falso, e você pode usar esses valores com esses nomes em inglês: true e false, respectivamente. É bastante comum em programação termos a necessidade de fazer uma pergunta de verdadeiro ou falso ou “sim ou não”, como “Esse curso é no semestre atual?” ou “O aniversário desta pessoa é hoje?”. Quando fazemos estas perguntas, temos uma resposta que é booleana.

Existe um outro valor nil, que se comporta como se fosse false quando o usamos num contexto booleano. Mas nil significa que não existe valor e não é um boolean.

Referência: Verdade

true
false
nil

Palavras-chaves

Palavras-chaves, ou keywords são o tipo básico mais estranho dos valores. Algumas linguagens de programação possuem um conceito similar. No entanto, palavras-chaves não tem um correspondente análogo do mundo real, como números, strings ou booleanos. Você pode pensar que elas são um tipo especial de string, um que é usado para dar nomes. Em geral são usadas como a chave de um par chave-valor para mapas (uma estrutura de dados; vamos aprender isso depois).

:trinta
:primeiro
:ultimo

Números

Inteiros

Clojure tem vários tipos de número.

Primeiramente existem os inteiros. Inteiros (ou integer) incluem o zero, todos os números inteiros positivos e todos os inteiros negativos. E você escreve do mesmo jeito que escreveria normalmente num texto.

0
12
-42

Números decimais

Também temos os números decimais, que às vezes também são chamados de floats ou números de ponto flutuante. Separamos a parte inteira da parte decimal usando o ., e o Clojure já considera aquele número como decimal.

0.0000072725
10.5
-99.9

Frações

Finalmente temos frações, também chamadas de ratios ou razões. Computadores não conseguem representar perfeitamente todos os floats, dízimas periódicas por exemplo, mas frações são sempre exatas. Usamos uma barra junto aos números para escrevê-las:

Note que, assim como na matemática, o denominador da fração nunca pode ser 0.

1/2
-7/3

Aritimética

Você pode somar, subtrair, multiplicar e dividir números. Em Clojure, aritimética é um pouquinho diferente do jeito que você escreve normalmente num caderno. Olhe esses exemplos:

(+ 1 1)  ;=> 1 + 1 = 2
(- 12 4) ;=> 12 - 4 = 8
(* 13 2) ;=> 13 * 2 = 26
(/ 27 9) ;=> 27 / 9 = 3

Notação infixa vs prefixa

Em Clojure, +, -, * e / aparecem antes dos dois números. Isso é chamado de notação prefixa. O que estamos acostumados a ver é chamado de notação infixa, onde a operação aritimética está entre os dois operandos.

Linguagens como JavaScript usam notação infixa, enquanto Clojure usa apenas notação prefixa. Notação prefixa é útil em vários casos. Veja esse exemplo de uma expressão infixa e o seu equivalente em prefixa:

Infixa:  1 + 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9

Prefixa: (+ (- (+ (+ 1 (/ (* 2 3) 4)) 5) (/ (* 6 7) 8)) 9)

Por que prefixa é melhor?

Precedência explicita

Na expressão anterior as duas versões são um pouco confusas, mas perceba que na versão prefixa você não precisa nem pensar na ordem de precedência dos operadores. Como cada expressão começa com o operador antes de qualquer operando e toda a expressão está entre parênteses, todas as precedências estão explícitas.

Infixa:  1 + 2 / 3
Prefixa: (+ 1 (/ 2 3))

Menos repetição

Outra razão pela qual a notação prefixa pode ser legal é que ela pode tornar expressões grandes menos repetitivas. Com notação prefixa, se precisamos usar o mesmo operador com vários operandos, não precisamos repetir o operador entre eles.

Infixa:  1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
Prefixa: (+ 1 2 3 4 5 6 7 8 9)

Aritimética com todos os tipos de número

Até agora só fizemos operações aritiméticas com inteiros. No entanto podemos usar decimais ou frações também nessas operações, ou mesmo misturar os tipos. Veja estes exemplos:

(+ 4/3 7/8)   ;=> 53/24
(- 9 4.2 1/2) ;=> 4.3
(/ 27/2 1.5)  ;=> 9.0

Atribuições: def

Se tivéssemos que digitar os mesmos valores várias e várias vezes, seria bastante difícil escrever um programa. O que precisamos é poder dar nomes a esses valores, assim podemos apenas nos referir a eles de uma maneira fácil de lembrar. Isso é chamado de atribuição.

Dar nomes a valores: def

Podemos dar um nome a um valor usando def. Quando um nome é atribuído a um valor, esse nome é chamado de símbolo.

Referência: Atribuição def

(def mangas 3)
(def laranjas 5)
(+ mangas laranjas)
;=> 8

Atribuindo resultados a símbolos

Podemos atribuir mais do que valores simples a símbolos. Tente o seguinte. Olhe a última linha e veja como podemos usar os símbolos sozinhos para se referir ao seu valor.

(def fruta (+ mangas laranjas))
(def valor-medio-das-frutas (/ fruta 2))
valor-medio-das-frutas
;=> 4

Voltar ao primeiro slide, ou ir para o índice do currículo.