52 votes

Clojure def vs defn pour une fonction sans argument

J'ai écrit un programme en clojure mais certaines fonctions n'ont pas d'argument. Quels seraient les avantages de coder de telles fonctions comme "def" au lieu de "defn" sans argument?

121voto

jamesqiu Points 636
user=> (def t0 (System/currentTimeMillis))
user=> (defn t1 [] (System/currentTimeMillis))
user=> (t1)
1318408717941
user=> t0
1318408644243
user=> t0
1318408644243
user=> (t1)
1318408719361

81voto

Abhinav Sarkar Points 10904

def s ne sont évalués qu'une seule fois alors que defn s (avec ou sans arguments) sont évalués (exécutés) chaque fois qu'ils sont appelés. Ainsi, si vos fonctions renvoient toujours la même valeur, vous pouvez les remplacer par def s mais pas autrement.

44voto

Roman Bataev Points 2806

(defn name ...) est juste une macro qui se transforme en (def name (fn ...) de toute façon, peu importe le nombre de paramètres dont il dispose. Il ne s'agit donc que d'un raccourci. Voir (doc defn) pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X