En Clojure, las constantes se definen mediante las formas especiales def o defonce, combinadas con una convención que sugiere que los nombres de las constantes estén en mayúsculas y con guiones bajos. Las constantes definidas con def
son inmutables por naturaleza.
def
La forma más común de declarar una constante en Clojure es mediante def
, que vincula un símbolo a un valor en el espacio de nombres actual. Dado que los valores vinculados con def
son inmutables, funcionan perfectamente como constantes.
Sintaxis:
(def NOMBRE-DE-CONSTANTE valor)
Ejemplo:
(def PI 3.1416)
(def MAX-USUARIOS 100)
(println "El valor de PI es:" PI)
(println "Máximo número de usuarios:" MAX-USUARIOS)
Salida:
El valor de PI es: 3.1416
Máximo número de usuarios: 100
defonce
Si necesitas asegurarte de que una constante se defina solo una vez en tiempo de ejecución (por ejemplo, cuando un archivo se recarga en el REPL), usa defonce. Esto evita redefinir la constante.
Sintaxis:
(defonce NOMBRE-DE-CONSTANTE valor)
Ejemplo:
(defonce API-URL "https://api.example.com")
(println "URL de la API:" API-URL)
En Clojure, es común organizar constantes relacionadas dentro de un namespace (espacio de nombres) para mejorar la modularidad y evitar conflictos. Esto se logra utilizando ns
para definir el espacio de nombres.
Ejemplo:
(ns configuracion)
(def APP-NAME "MiAplicación")
(def VERSION "1.0.0")
(def MAX-REINTENTOS 5)
;; Uso desde otro namespace
(ns main
(:require [configuracion :as config]))
(println "Nombre de la aplicación:" config/APP-NAME)
(println "Versión:" config/VERSION)
(println "Máximo de reintentos:" config/MAX-REINTENTOS)
Salida:
Nombre de la aplicación: MiAplicación
Versión: 1.0.0
Máximo de reintentos: 5
:const
para optimizaciones en macros
Si estás escribiendo macros y necesitas que una constante sea inyectada directamente en tiempo de compilación, puedes usar el atributo :const. Esto asegura que el valor de la constante sea sustituido directamente en el código generado.
Ejemplo:
(def ^:const MAX-LENGTH 256)
(println "Longitud máxima permitida:" MAX-LENGTH)
Este enfoque es útil para optimizar valores utilizados frecuentemente en cálculos.
1. Usa def para definir constantes.
2. Nombra las constantes en mayúsculas y con guiones bajos para distinguirlas de otras variables.
3. Usa defonce para valores que deben definirse solo una vez.
4. Agrupa constantes relacionadas dentro de un espacio de nombres.
5. Usa ^:const en casos donde se necesite inyectar el valor en tiempo de compilación.
Para más detalles, consulta la documentación oficial de Clojure sobre def.
Jorge García
Fullstack developer