документация дает ответ:
=> (doc declare)
-------------------------
clojure.core/declare
([& names])
Macro
defs the supplied var names with no bindings, useful for making forward declarations.
Looking at the implementation, ясно, что declare
определяется в терминах def
и содержит немного синтаксиса сахара. Так функционально, они почти одинаковы.
Преимущество declare
- показать намерение для более позднего читателя. (declare x y z)
означает, что я намеревался сделать опережающее объявление этих символов, поскольку макрос useful for making forward declarations.
(def x) (def y) (def z)
означает, что я стажировался эти символы, но вы не знаете, если я имел в виду, чтобы дать им определения и забыли, или I «Делать декларации вперед или, может быть, что-то еще тонкое.
Итак, (declare x)
должно быть предпочтительнее, чем (def x)
, когда вы делаете объявление вперед, чтобы проявить милосердие к будущим читателям вашего кода.