Improving a little bit more

This commit is contained in:
Mariane Siqueira Machado 2014-12-05 20:15:08 -02:00
parent 283973e99d
commit b3e0d27698

View File

@ -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)