def
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.
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.\""
Um booleano é um valor que é verdadeiro ou falso, e você pode usar esses valores com esses nomes em inglês:
true
efalse
, 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 fossefalse
quando o usamos num contexto booleano. Masnil
significa que não existe valor e não é um boolean.
Referência: Verdade
true
false
nil
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
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
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
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
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
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)
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))
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)
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
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.
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
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.