mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-05-20 21:30:59 +00:00
Improving a little bit more
This commit is contained in:
parent
283973e99d
commit
b3e0d27698
@ -10,7 +10,7 @@ lang: pt-br
|
|||||||
|
|
||||||
Clojure é uma linguagem da família do Lisp desenvolvida para a JVM (máquina virtual Java). Possui uma ênfase muito mais forte em [programação funcional] (https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional) pura do que Common Lisp, mas inclui diversas utilidades [STM](https://en.wikipedia.org/wiki/Software_transactional_memory) para lidar com estado a medida que isso se torna necessário.
|
Clojure é uma linguagem da família do Lisp desenvolvida para a JVM (máquina virtual Java). Possui uma ênfase muito mais forte em [programação funcional] (https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional) pura do que Common Lisp, mas inclui diversas utilidades [STM](https://en.wikipedia.org/wiki/Software_transactional_memory) para lidar com estado a medida que isso se torna necessário.
|
||||||
|
|
||||||
Essa combinação permite gerenciar processamento concorrente de maneira muito simples e frequentemente de maneira automática.
|
Essa combinação permite gerenciar processamento concorrente de maneira muito simples, e frequentemente de maneira automática.
|
||||||
|
|
||||||
(Sua versão de clojure precisa ser pelo menos 1.2)
|
(Sua versão de clojure precisa ser pelo menos 1.2)
|
||||||
|
|
||||||
@ -18,10 +18,10 @@ Essa combinação permite gerenciar processamento concorrente de maneira muito s
|
|||||||
```clojure
|
```clojure
|
||||||
; Comentários começam por ponto e vírgula
|
; Comentários começam por ponto e vírgula
|
||||||
|
|
||||||
; Clojure é escrito em "forms" (padrões), os quais são simplesmente
|
; Clojure é escrito em "forms", os quais são simplesmente
|
||||||
; listas de coisas dentro de parênteses, separados por espaços em branco.
|
; listas de coisas dentro de parênteses, separados por espaços em branco.
|
||||||
|
|
||||||
; O "reader" (leitor) de clojure presume que o primeiro elemento de
|
; O "reader" (leitor) de Clojure presume que o primeiro elemento de
|
||||||
; uma par de parênteses é uma função ou macro, e que os resto são argumentos.
|
; uma par de parênteses é uma função ou macro, e que os resto são argumentos.
|
||||||
|
|
||||||
: A primeira chamada de um arquivo deve ser ns, para configurar o namespace (espaço de nomes)
|
: A primeira chamada de um arquivo deve ser ns, para configurar o namespace (espaço de nomes)
|
||||||
@ -32,20 +32,20 @@ Essa combinação permite gerenciar processamento concorrente de maneira muito s
|
|||||||
; str cria uma string concatenando seus argumentos
|
; str cria uma string concatenando seus argumentos
|
||||||
(str "Hello" " " "World") ; => "Hello World"
|
(str "Hello" " " "World") ; => "Hello World"
|
||||||
|
|
||||||
; Math é direta e intuitiva
|
; Cálculos são feitos de forma direta e intuitiva
|
||||||
(+ 1 1) ; => 2
|
(+ 1 1) ; => 2
|
||||||
(- 2 1) ; => 1
|
(- 2 1) ; => 1
|
||||||
(* 1 2) ; => 2
|
(* 1 2) ; => 2
|
||||||
(/ 2 1) ; => 2
|
(/ 2 1) ; => 2
|
||||||
|
|
||||||
; Igualdade é =
|
; Você pode comparar igualdade utilizando =
|
||||||
(= 1 1) ; => true
|
(= 1 1) ; => true
|
||||||
(= 2 1) ; => false
|
(= 2 1) ; => false
|
||||||
|
|
||||||
; Negação para operações lógicas
|
; Negação para operações lógicas
|
||||||
(not true) ; => false
|
(not true) ; => false
|
||||||
|
|
||||||
; Aninhar forms (padrões) funciona como esperado
|
; Aninhar "forms" funciona como esperado
|
||||||
(+ 1 (- 3 2)) ; = 1 + (3 - 2) => 2
|
(+ 1 (- 3 2)) ; = 1 + (3 - 2) => 2
|
||||||
|
|
||||||
; Tipos
|
; Tipos
|
||||||
@ -131,7 +131,7 @@ Essa combinação permite gerenciar processamento concorrente de maneira muito s
|
|||||||
; (É necessário colocar parênteses para chamá-los)
|
; (É necessário colocar parênteses para chamá-los)
|
||||||
((fn [] "Hello World")) ; => "Hello World"
|
((fn [] "Hello World")) ; => "Hello World"
|
||||||
|
|
||||||
; Você pode criar variáveis (var) usando def
|
; Você pode atribuir valores a variáveis utilizando def
|
||||||
(def x 1)
|
(def x 1)
|
||||||
x ; => 1
|
x ; => 1
|
||||||
|
|
||||||
@ -182,8 +182,11 @@ x ; => 1
|
|||||||
; operações se eles ficarem grandes o suficiente, portanto não há necessida de
|
; operações se eles ficarem grandes o suficiente, portanto não há necessida de
|
||||||
; se preocupar com isso.
|
; se preocupar com isso.
|
||||||
|
|
||||||
; Maps podem usar qualquer tipo "hasheavel" como chave, mas normalmente
|
;Mapas podem usar qualquer valor que se pode derivar um hash como chave
|
||||||
; keywords (palavras chave) são melhores.
|
|
||||||
|
|
||||||
|
; Mapas podem usar qualquer valor em que se pode derivar um hash como chave,
|
||||||
|
; mas normalmente palavras-chave (keywords) são melhores.
|
||||||
; Keywords são como strings mas com algumas vantagens.
|
; Keywords são como strings mas com algumas vantagens.
|
||||||
(class :a) ; => clojure.lang.Keyword
|
(class :a) ; => clojure.lang.Keyword
|
||||||
|
|
||||||
@ -199,7 +202,7 @@ keymap ; => {:a 1, :c 3, :b 2}
|
|||||||
(stringmap "a") ; => 1
|
(stringmap "a") ; => 1
|
||||||
(keymap :a) ; => 1
|
(keymap :a) ; => 1
|
||||||
|
|
||||||
; Uma palavra chave pode ser usada pra recuperar os valores de um mapa
|
; Uma palavra-chave pode ser usada pra recuperar os valores de um mapa
|
||||||
(:b keymap) ; => 2
|
(:b keymap) ; => 2
|
||||||
|
|
||||||
; Não tente isso com strings
|
; Não tente isso com strings
|
||||||
@ -213,7 +216,7 @@ keymap ; => {:a 1, :c 3, :b 2}
|
|||||||
(def newkeymap (assoc keymap :d 4))
|
(def newkeymap (assoc keymap :d 4))
|
||||||
newkeymap ; => {:a 1, :b 2, :c 3, :d 4}
|
newkeymap ; => {:a 1, :b 2, :c 3, :d 4}
|
||||||
|
|
||||||
; Mas lembre-se, tipos em clojure são sempre imutáveis!
|
; Mas lembre-se, tipos em Clojure são sempre imutáveis!
|
||||||
keymap ; => {:a 1, :b 2, :c 3}
|
keymap ; => {:a 1, :b 2, :c 3}
|
||||||
|
|
||||||
; Use dissoc para remover chaves
|
; Use dissoc para remover chaves
|
||||||
@ -228,7 +231,7 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; Adicione um membro com conj
|
; Adicione um membro com conj
|
||||||
(conj #{1 2 3} 4) ; => #{1 2 3 4}
|
(conj #{1 2 3} 4) ; => #{1 2 3 4}
|
||||||
|
|
||||||
; Remove um com disj
|
; Remova um membro com disj
|
||||||
(disj #{1 2 3} 1) ; => #{2 3}
|
(disj #{1 2 3} 1) ; => #{2 3}
|
||||||
|
|
||||||
; Test por existência usando set como função:
|
; Test por existência usando set como função:
|
||||||
@ -237,19 +240,19 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
|
|
||||||
; Existem muitas outras funções no namespace clojure.sets
|
; Existem muitas outras funções no namespace clojure.sets
|
||||||
|
|
||||||
; Forms (padrões) úteis
|
; Forms úteis
|
||||||
;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
; Construções lógicas em clojure são como macros, e
|
; Construções lógicas em Clojure são como macros, e
|
||||||
; se parecem com as demais
|
; se parecem com as demais
|
||||||
(if false "a" "b") ; => "b"
|
(if false "a" "b") ; => "b"
|
||||||
(if false "a") ; => nil
|
(if false "a") ; => nil
|
||||||
|
|
||||||
; Use let para criar amarramentos (bindings) temporários
|
; Use let para criar um novo escopo associando sîmbolos a valores (bindings)
|
||||||
(let [a 1 b 2]
|
(let [a 1 b 2]
|
||||||
(> a b)) ; => false
|
(> a b)) ; => false
|
||||||
|
|
||||||
; Agrupe comandos juntos com do
|
; Agrupe comandos juntos com "do"
|
||||||
(do
|
(do
|
||||||
(print "Hello")
|
(print "Hello")
|
||||||
"World") ; => "World" (prints "Hello")
|
"World") ; => "World" (prints "Hello")
|
||||||
@ -281,7 +284,7 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; Use require para importar um módulo
|
; Use require para importar um módulo
|
||||||
(require 'clojure.string)
|
(require 'clojure.string)
|
||||||
|
|
||||||
; USe / para chamar funções de um módulo
|
; Use / para chamar funções de um módulo
|
||||||
; Aqui, o módulo é clojure.string e a função é blank?
|
; Aqui, o módulo é clojure.string e a função é blank?
|
||||||
(clojure.string/blank? "") ; => true
|
(clojure.string/blank? "") ; => true
|
||||||
|
|
||||||
@ -316,10 +319,10 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
|
|
||||||
; Use . para chamar métodos. Ou, use o atalho ".method"
|
; Use . para chamar métodos. Ou, use o atalho ".method"
|
||||||
(. (Date.) getTime) ; <a timestamp>
|
(. (Date.) getTime) ; <a timestamp>
|
||||||
(.getTime (Date.)) ; exactly the same thing.
|
(.getTime (Date.)) ; exatamente a mesma coisa.
|
||||||
|
|
||||||
; Use / para chamar métodos estáticos
|
; Use / para chamar métodos estáticos
|
||||||
(System/currentTimeMillis) ; <a timestamp> (system is always present)
|
(System/currentTimeMillis) ; <a timestamp> (o módulo System está sempre presente)
|
||||||
|
|
||||||
; Use doto para pode lidar com classe (mutáveis) de forma mais tolerável
|
; Use doto para pode lidar com classe (mutáveis) de forma mais tolerável
|
||||||
(import java.util.Calendar)
|
(import java.util.Calendar)
|
||||||
@ -330,8 +333,8 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; STM
|
; STM
|
||||||
;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
; Software Transactional Memory é o mecanismo que clojure usa para gerenciar
|
; Software Transactional Memory é o mecanismo que Clojure usa para gerenciar
|
||||||
; estado persistente. Tem algumas construções em clojure que o utilizam.
|
; estado persistente. Tem algumas construções em Clojure que o utilizam.
|
||||||
|
|
||||||
; O atom é o mais simples. Passe pra ele um valor inicial
|
; O atom é o mais simples. Passe pra ele um valor inicial
|
||||||
(def my-atom (atom {}))
|
(def my-atom (atom {}))
|
||||||
@ -339,8 +342,8 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; Atualize o atom com um swap!.
|
; Atualize o atom com um swap!.
|
||||||
; swap! pega uma funçnao and chama ela com o valor atual do atom
|
; swap! pega uma funçnao and chama ela com o valor atual do atom
|
||||||
; como primeiro argumento, e qualquer argumento restante como o segundo
|
; como primeiro argumento, e qualquer argumento restante como o segundo
|
||||||
(swap! my-atom assoc :a 1) ; Sets my-atom to the result of (assoc {} :a 1)
|
(swap! my-atom assoc :a 1) ; Coloca o valor do átomo my-atom como o resultado de (assoc {} :a 1)
|
||||||
(swap! my-atom assoc :b 2) ; Sets my-atom to the result of (assoc {:a 1} :b 2)
|
(swap! my-atom assoc :b 2) ; Coloca o valor do átomo my-atom como o resultado de (assoc {:a 1} :b 2)
|
||||||
|
|
||||||
; Use '@' para desreferenciar um atom e acessar seu valor
|
; Use '@' para desreferenciar um atom e acessar seu valor
|
||||||
my-atom ;=> Atom<#...> (Retorna o objeto do Atom)
|
my-atom ;=> Atom<#...> (Retorna o objeto do Atom)
|
||||||
|
Loading…
Reference in New Issue
Block a user