Looking for clojure Answers? Try Ask4KnowledgeBase
Looking for clojure Keywords? Try Ask4Keywords

clojureEmpezando con clojure


Observaciones

introduzca la descripción de la imagen aquí

Clojure es un lenguaje de programación de propósito general de tipo dinámico con la sintaxis de Lisp.

Sus características admiten el estilo funcional de programación con funciones de primera clase y valores inmutables de forma predeterminada. El uso de variables reasignables no es tan fácil en Clojure como en muchos idiomas convencionales, ya que las variables deben crearse y actualizarse como objetos contenedores. Esto fomenta el uso de valores puros que permanecerán como estaban en el momento en que fueron vistos por última vez. Por lo general, esto hace que el código sea mucho más predecible, verificable y con capacidad de concurrencia. Esto también funciona para las colecciones, ya que las estructuras de datos integradas de Clojure son persistentes.

Para el rendimiento, Clojure admite sugerencias de tipo para eliminar la reflexión innecesaria cuando sea posible. Además, se pueden realizar grupos de cambios en las colecciones persistentes en versiones transitorias , lo que reduce la cantidad de objetos involucrados. Esto no es necesario la mayoría del tiempo, ya que las colecciones persistentes se copian rápidamente ya que comparten la mayoría de sus datos. Sus garantías de desempeño no están lejos de sus contrapartes mutables.

Entre otras características, Clojure también tiene:

  • memoria transaccional de software (STM)
  • varias primitivas de concurrencia que no implican bloqueo manual (átomo, agente)
  • transformadores de secuencia composable (transductores),
  • Instalaciones funcionales de manipulación de árboles (cremalleras).

Debido a su sintaxis simple y alta extensibilidad (a través de macros, implementación de interfaces centrales y reflexión), algunas características del lenguaje que se ven comúnmente se pueden agregar a Clojure con las bibliotecas. Por ejemplo, core.typed trae un verificador de tipo estático, core.async trae mecanismos de concurrencia simples basados ​​en canales, core.logic trae programación lógica.

Diseñado como un lenguaje alojado, puede interoperar con la plataforma en la que se ejecuta. Si bien el objetivo principal es JVM y todo el ecosistema detrás de Java, también se pueden ejecutar implementaciones alternativas en otros entornos, como ClojureCLR ejecutándose en Common Language Runtime o ClojureScript ejecutándose en tiempos de ejecución de JavaScript (incluidos los navegadores web). Si bien las implementaciones alternativas pueden carecer de algunas de las funcionalidades de la versión JVM, todavía se consideran una familia de idiomas.

Versiones

Versión Registro de cambios Fecha de lanzamiento
1.8 Último registro de cambios 2016-01-19
1.7 Cambio de registro 1.7 2015-06-30
1.6 Cambio de registro 1.6 2014-03-25
1.5.1 Cambio de registro 1.5.1 2013-03-10
1.4 Registro de cambios 1.4 15/04/2012
1.3 Registro de cambios 1.3 2011-09-23
1.2.1 2011-03-25
1.2 2010-08-19
1.1 2010-01-04
1.0 2009-05-04

"¡Hola Mundo!" en el REPL

La comunidad de Clojure pone un gran énfasis en el desarrollo interactivo, por lo que una gran cantidad de interacción con Clojure ocurre dentro de un REPL (read-eval-print-loop) . Cuando ingresas una expresión en ella, Clojure la lee , la evalúa e imprime el resultado de la evaluación, todo en un bucle .

Ya deberías poder lanzar un Clojure REPL. Si no sabe cómo hacerlo, siga las instrucciones de instalación y configuración de este tema. Una vez que lo tienes funcionando, escribe lo siguiente en él:

(println "Hello, world!")
 

Luego presiona Enter . Esto debería imprimir Hello, world! , seguido del valor de retorno de esta expresión, nil .

Si desea ejecutar un poco de clojure al instante, intente REPL en línea. Por ejemplo http://www.tryclj.com/ .

"¡Hola Mundo!" usando Boot

Nota: necesitas instalar Boot antes de probar este ejemplo. Consulte la sección Instalación y configuración si aún no lo ha instalado.

Boot permite crear archivos ejecutables de Clojure utilizando la línea shebang (#!). Coloque el siguiente texto en un archivo de su elección (este ejemplo asume que está en el "directorio de trabajo actual" y se llama hello.clj ).

#!/usr/bin/env boot

(defn -main [& args]
  (println "Hello, world!"))
 

Luego chmod +x hello.clj como ejecutable (si corresponde, normalmente ejecutando chmod +x hello.clj ).
... y ejecutarlo ( ./hello.clj ).

El programa debe mostrar "¡Hola, mundo!" y acaba.

Crear una nueva aplicación

Después de seguir las instrucciones anteriores e instalar Leiningen, inicie un nuevo proyecto ejecutando:

lein new <project-name>
 

Esto configurará un proyecto de Clojure con la plantilla de Leiningen predeterminada dentro de la carpeta <project-name> . Hay varias plantillas para Leiningen, que afectan la estructura del proyecto. Más comúnmente es la plantilla "aplicación" utilizada, que agrega una función principal y prepara el proyecto para ser empaquetado en un archivo jar (cuya función principal es el punto de entrada de la aplicación). Esto se puede lograr con esto ejecutando:

lein new app <project-name> 
 

Suponiendo que utilizó la plantilla de la aplicación para crear una nueva aplicación, puede probar que todo se configuró correctamente, ingresando al directorio creado y ejecutando la aplicación usando:

lein run
 

Si ves Hello, World! en su consola, está todo listo y listo para comenzar a construir su aplicación.

Puede empaquetar esta sencilla aplicación en dos archivos jar con el siguiente comando:

lein uberjar
 

Crear una nueva aplicación (con arranque)

boot -d seancorfield/boot-new new -t app -n <appname>
 

Este comando le dirá a boot que tome la tarea boot-new desde https://github.com/seancorfield/boot-new y ejecute la tarea con la plantilla de la app (vea el enlace para otras plantillas). La tarea creará un nuevo directorio llamado <appname> con una estructura de aplicación típica de Clojure. Consulte el archivo README generado para obtener más información.

Para ejecutar la aplicación: boot run . Otros comandos se especifican en build.boot y se describen en README.

Instalación y configuración

Opción 1: Leiningen

Requiere JDK 6 o más nuevo.

La forma más fácil de comenzar con Clojure es descargar e instalar Leiningen, la herramienta estándar de facto para administrar proyectos de Clojure, y luego ejecutar el lein repl para abrir un REPL .

Linux

curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein
export PATH=$PATH:~/bin
chmod 755 ~/bin/lein

OS X

Siga los pasos de Linux anteriores o instale con los administradores de paquetes macOS.

Instalar con Homebrew

brew install leiningen

Instalar con MacPorts

Primero instala Clojure

sudo port -R install clojure

Instala Leiningen , una herramienta de compilación para Clojure

sudo port -R install leiningen
lein self-install

Windows

Consulte la documentación oficial .

Opción 2: Distribución oficial

Requiere JRE 6 o más nuevo.

Las versiones de Clojure se publican como archivos JAR simples que se ejecutan en la JVM. Esto es lo que sucede típicamente dentro de las herramientas de construcción de Clojure.

  1. Vaya a http://clojure.org y descargue el último archivo de Clojure

  2. Extraiga el archivo ZIP descargado en un directorio de su elección

  3. Ejecute java -cp clojure-1.8.0.jar clojure.main en ese directorio

    Puede que tenga que sustituir el clojure-1.8.0.jar en ese comando por el nombre del archivo JAR que realmente descargó.

    Para una mejor experiencia de REPL en la línea de comandos (por ejemplo, rlwrap los comandos anteriores), es posible que desee instalar rlwrap : rlwrap java -cp clojure-1.8.0.jar clojure.main

Opción 3: Arranque

Requiere JDK 7 o más nuevo.

Boot es una herramienta de compilación Clojure de usos múltiples. Comprenderlo requiere cierto conocimiento de Clojure, por lo que puede que no sea la mejor opción para los principiantes. Consulte el sitio web (haga clic en Comenzar allí) para obtener instrucciones de instalación.

Una vez que esté instalado y en su PATH , puede ejecutar boot repl cualquier lugar para iniciar un Clojure REPL.