Clojure, ¿Qué es? ¿Para que sirve?

Los lenguajes de programación se podrían clasificar en 3 grandes paradigmas: los imperativos (C, COBOL…) que acentúa los cambios en las variables, los orientados a objetos (C++, Java, PHP, Python, Javascript..) evolución de los imperativos cuya fuerza radica en el empaquetamiento y los funcionales (Lisp, Haskell, Scala, Elm…) donde se usan expresiones con entradas y salidas. Ninguno es superior a otro, son diferentes puntos de vistas para resolver los mismos problemas. En este caso Clojure estaría dentro de los puramente funcionales, un lenguaje excepcional por disponer las mejores herramientas del paradigma con el rendimiento de Java al usar su máquina virtual (aunque existen otras implementaciones).

Antes de continuar profundizando debemos aclarar que Clojure se pronuncia como en inglés Closure (/ˈkloʊʒər/). Su nombre es un juego de palabras: “C” de C#, “L” de Lisp y “J” de Java. Los lenguajes que influenciaron a su creador, y actual vitalicio dictador benevolente, para el diseño. Una elegante forma de agradecer a todos los que trabajan detrás de esos lenguajes permitiendo que Clojure exista.

Origen

Rick Hickey desarrolló dotLips, un proyecto muy parecido a Clojure pero basado en el ecosistema de .NET. Después logro con éxito otros 3 proyectos donde conseguía herramientas de interoperabilidad entre Lisp y Java.

Con todo lo aprendido decidió empezar un proyecto nuevo, un lenguaje de programación que modernizara Lisp y trabajara muy estrechamente con la máquina virtual de Java. Sin ningún anuncio público, trabajó durante 2 años y medios en su primera versión de Clojure. Sin ayudas económica, y en algúnos periodos dedicando su tiempo completo.

Durante todo el proceso fue publicando en su blog los avances hasta que un día, el October 16 del 2007, envió algunos email a algunos amigos de la comunidad Common Lisp anunciando la versión estable. Su implementación gustó tanto que se empezó a utilizar como una versión actual de Lisp, y parte de la comunidad fue incorporándose de forma gradual.

Implementaciones

Clojure no se compila, debe ser leído antes de ejecutarse (S-expressions o expresiones en árbol popularizado por Lisp). Por ello existen implementaciones en diferentes lenguajes de programación, similar a otros como puede ser Python, quién se encargan de preparar el código antes de lanzarlo. Entre ellas tenemos:

Existen muchas otras no oficiales, pero ninguna poseen el apoyo tan grande de la comunidad y el mantenimiento de las actualizaciones.

Empresas que lo utilizan

Diferentes firmas e instituciones gubernamentales lo usan principalmente para todo lo relacionado con desarrollo Web (APIs y microservicios), IA (siempre ha destacado Lisp en este área) y desarrollos de gran rendimiento. Nos podemos encontrar:

Aunque también es usado para la industria de la música, videojuegos, IA y…¡!

Ventajas y desventajas

Pros

Contras

Ejemplo de sintaxis

;; Defines una variable llamada `edad`
(def edad 42)

;; Usamos la función llamada `-` para restar
(- edad 8)
;; Devuelve => 34 ; Nos hemos quitado 8 años de un golpe
;; Buscamos los números pares del 0 al 10
(filter #(even? %) (range 10))

;; Devuelve => (0 2 4 6 8)

Por donde empezar

Siempre es complejo filtrar entre tanto material que hay en internet, y además cada persona posee una forma diferente de aprender: libros, otros vídeos, otros guías cortas, actividades… Yo recomiendo empezar conociendo bien la sintaxis del lenguaje. En la página oficial hay una estupenda.

Los libros más interesantes que he encontrado son de Dmitri Sotnikov, de Daniel Higginbotham y, no puedo dejar de recomendar este libro cuando hablamos sobre un tema relacionado de alguna manera con Lisp, de Conrad Barski M.D. que te ayudará a pensar y resolver tus problemas de manera funcional.

Si quieres practicar con actividades te recomiendo y , Katas cortas para ir mejorando día a día.

Por descontado necesitarás un entorno de trabajo con un editor poderoso y bien integrado con el lenguaje. Entre mis artículos podrás leer .

Como apunte final quiero comentar que aunque no uses Clojure de forma recurrente te enseñará a ser mejor programador. Acabarás usando, sin darte cuenta, nuevas maneras de simplificar los problemas. Es una sensación que todos hemos vivido.

Versión escritorio