Dokumentacja daje odpowiedź:
=> (doc declare)
-------------------------
clojure.core/declare
([& names])
Macro
defs the supplied var names with no bindings, useful for making forward declarations.
Looking at the implementation, jasne jest, że declare
jest zdefiniowany pod względem def
i dostarcza trochę cukru składniowego. Funkcjonalnie, są prawie takie same.
Zaletą declare
jest wykazanie, przeznaczona do późniejszego czytelnika. (declare x y z)
oznacza zamierzałem złożyć do przodu deklarację tych symboli, bo makro jest useful for making forward declarations.
(def x) (def y) (def z)
znaczy ja interning te symbole, ale nie wiem, czy chciałem dać im definicje i zapomniał czy I Składam deklaracje, a może subtelne.
A więc, (declare x)
należy preferować w stosunku do (def x)
, gdy składasz deklarację, aby okazać miłosierdzie przyszłym czytelnikom Twojego kodu.