mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-25 08:13:29 +03:00
Limit document to 80 columns, where possible
This commit is contained in:
parent
cfe737647c
commit
43cb521310
@ -10,8 +10,10 @@ lang: es-es
|
|||||||
---
|
---
|
||||||
|
|
||||||
Clojure es un lenguaje de la familia Lisp desarrollado sobre la Máquina Virtual
|
Clojure es un lenguaje de la familia Lisp desarrollado sobre la Máquina Virtual
|
||||||
de Java. Tiene un énfasis mayor en la [programación funcional](https://es.wikipedia.org/wiki/Programación_funcional) pura
|
de Java. Tiene un énfasis mayor en la
|
||||||
que Common Lisp, pero incluyendo la posibilidad de usar [SMT](https://es.wikipedia.org/wiki/Memoria_transacional) para manipular
|
[programación funcional](https://es.wikipedia.org/wiki/Programación_funcional)
|
||||||
|
pura que Common Lisp, pero incluyendo la posibilidad de usar
|
||||||
|
[SMT](https://es.wikipedia.org/wiki/Memoria_transacional) para manipular
|
||||||
el estado según se presente.
|
el estado según se presente.
|
||||||
|
|
||||||
Esta combinación le permite gestionar la concurrencia de manera muy sencilla
|
Esta combinación le permite gestionar la concurrencia de manera muy sencilla
|
||||||
@ -19,7 +21,6 @@ y a menudo automáticamente.
|
|||||||
|
|
||||||
(Necesitas la versión de Clojure 1.2 o posterior)
|
(Necesitas la versión de Clojure 1.2 o posterior)
|
||||||
|
|
||||||
|
|
||||||
```clojure
|
```clojure
|
||||||
; Los comentatios comienzan con punto y coma.
|
; Los comentatios comienzan con punto y coma.
|
||||||
|
|
||||||
@ -29,8 +30,8 @@ y a menudo automáticamente.
|
|||||||
; El "reader" (lector) de Clojure asume que el primer objeto es una
|
; El "reader" (lector) de Clojure asume que el primer objeto es una
|
||||||
; función o una macro que se va a llamar, y que el resto son argumentos.
|
; función o una macro que se va a llamar, y que el resto son argumentos.
|
||||||
|
|
||||||
; El primer form en un archivo debe ser ns, para establecer el namespace (espacio de
|
; El primer form en un archivo debe ser ns, para establecer el namespace
|
||||||
; nombres)
|
; (espacio de nombres)
|
||||||
(ns learnclojure)
|
(ns learnclojure)
|
||||||
|
|
||||||
; Algunos ejemplos básicos:
|
; Algunos ejemplos básicos:
|
||||||
@ -78,9 +79,9 @@ y a menudo automáticamente.
|
|||||||
; Colecciones & Secuencias
|
; Colecciones & Secuencias
|
||||||
;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
; Las Listas están basadas en las listas enlazadas, mientras que los Vectores en
|
; Las Listas están basadas en las listas enlazadas, mientras que los Vectores
|
||||||
; arrays.
|
; en arrays.
|
||||||
; ¡Los Vectores y las Listas también son clases de Java!
|
; Los Vectores y las Listas también son clases de Java!
|
||||||
(class [1 2 3]); => clojure.lang.PersistentVector
|
(class [1 2 3]); => clojure.lang.PersistentVector
|
||||||
(class '(1 2 3)); => clojure.lang.PersistentList
|
(class '(1 2 3)); => clojure.lang.PersistentList
|
||||||
|
|
||||||
@ -168,7 +169,8 @@ x ; => 1
|
|||||||
(hello3 "Jake") ; => "Hello Jake"
|
(hello3 "Jake") ; => "Hello Jake"
|
||||||
(hello3) ; => "Hello World"
|
(hello3) ; => "Hello World"
|
||||||
|
|
||||||
; Las funciones pueden usar argumentos extras dentro de un seq utilizable en la función
|
; Las funciones pueden usar argumentos extras dentro de un seq utilizable en
|
||||||
|
; la función
|
||||||
(defn count-args [& args]
|
(defn count-args [& args]
|
||||||
(str "You passed " (count args) " args: " args))
|
(str "You passed " (count args) " args: " args))
|
||||||
(count-args 1 2 3) ; => "You passed 3 args: (1 2 3)"
|
(count-args 1 2 3) ; => "You passed 3 args: (1 2 3)"
|
||||||
@ -183,8 +185,8 @@ x ; => 1
|
|||||||
; Mapas
|
; Mapas
|
||||||
;;;;;;;;;;
|
;;;;;;;;;;
|
||||||
|
|
||||||
; Mapas de Hash y mapas de arrays comparten una misma interfaz. Los mapas de Hash
|
; Mapas de Hash y mapas de arrays comparten una misma interfaz. Los mapas de
|
||||||
; tienen búsquedas más rápidas pero no mantienen el orden de las claves.
|
; Hash tienen búsquedas más rápidas pero no mantienen el orden de las claves.
|
||||||
(class {:a 1 :b 2 :c 3}) ; => clojure.lang.PersistentArrayMap
|
(class {:a 1 :b 2 :c 3}) ; => clojure.lang.PersistentArrayMap
|
||||||
(class (hash-map :a 1 :b 2 :c 3)) ; => clojure.lang.PersistentHashMap
|
(class (hash-map :a 1 :b 2 :c 3)) ; => clojure.lang.PersistentHashMap
|
||||||
|
|
||||||
@ -193,7 +195,8 @@ x ; => 1
|
|||||||
|
|
||||||
; Los mapas pueden usar cualquier tipo para sus claves, pero generalmente las
|
; Los mapas pueden usar cualquier tipo para sus claves, pero generalmente las
|
||||||
; keywords (palabras clave) son lo habitual.
|
; keywords (palabras clave) son lo habitual.
|
||||||
; Las keywords son parecidas a cadenas de caracteres con algunas ventajas de eficiencia
|
; Las keywords son parecidas a cadenas de caracteres con algunas ventajas de
|
||||||
|
; eficiencia
|
||||||
(class :a) ; => clojure.lang.Keyword
|
(class :a) ; => clojure.lang.Keyword
|
||||||
|
|
||||||
(def stringmap {"a" 1, "b" 2, "c" 3})
|
(def stringmap {"a" 1, "b" 2, "c" 3})
|
||||||
@ -250,8 +253,8 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; Patrones útiles
|
; Patrones útiles
|
||||||
;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
; Las construcciones lógicas en clojure son macros, y presentan el mismo aspecto
|
; Las construcciones lógicas en clojure son macros, y presentan el mismo
|
||||||
; que el resto de forms.
|
; aspecto que el resto de forms.
|
||||||
(if false "a" "b") ; => "b"
|
(if false "a" "b") ; => "b"
|
||||||
(if false "a") ; => nil
|
(if false "a") ; => nil
|
||||||
|
|
||||||
@ -352,8 +355,10 @@ keymap ; => {:a 1, :b 2, :c 3}
|
|||||||
; Actualiza un atom con swap!
|
; Actualiza un atom con swap!
|
||||||
; swap! toma una función y la llama con el valor actual del atom
|
; swap! toma una función y la llama con el valor actual del atom
|
||||||
; como su primer argumento, y cualquier argumento restante como el segundo
|
; como su primer argumento, y cualquier argumento restante como el segundo
|
||||||
(swap! my-atom assoc :a 1) ; Establece my-atom al resultado de (assoc {} :a 1)
|
(swap! my-atom assoc :a 1) ; Establece my-atom al resultado
|
||||||
(swap! my-atom assoc :b 2) ; Establece my-atom al resultado de (assoc {:a 1} :b 2)
|
; de (assoc {} :a 1)
|
||||||
|
(swap! my-atom assoc :b 2) ; Establece my-atom al resultado
|
||||||
|
; de (assoc {:a 1} :b 2)
|
||||||
|
|
||||||
; Usa '@' para no referenciar al atom sino para obtener su valor
|
; Usa '@' para no referenciar al atom sino para obtener su valor
|
||||||
my-atom ;=> Atom<#...> (Regresa el objeto Atom)
|
my-atom ;=> Atom<#...> (Regresa el objeto Atom)
|
||||||
@ -377,7 +382,8 @@ my-atom ;=> Atom<#...> (Regresa el objeto Atom)
|
|||||||
; Agents: http://clojure.org/agents
|
; Agents: http://clojure.org/agents
|
||||||
### Lectura adicional
|
### Lectura adicional
|
||||||
|
|
||||||
Ésto queda lejos de ser exhaustivo, pero espero que sea suficiente para que puedas empezar tu camino.
|
Ésto queda lejos de ser exhaustivo, pero espero que sea suficiente para que
|
||||||
|
puedas empezar tu camino.
|
||||||
|
|
||||||
Clojure.org tiene muchos artículos:
|
Clojure.org tiene muchos artículos:
|
||||||
[http://clojure.org/](http://clojure.org/)
|
[http://clojure.org/](http://clojure.org/)
|
||||||
|
Loading…
Reference in New Issue
Block a user