Il semble que CoffeeScript renvoie automatiquement le dernier élément d'une étendue. Puis-je éviter cette fonctionnalité?
Il semble que CoffeeScript renvoie automatiquement le dernier élément d'une étendue. Puis-je éviter cette fonctionnalité?
Réponses:
Vous devez explicitement ne rien renvoyer, ou laisser une expression évaluée à indéfinie en bas de votre fonction:
fun = ->
doSomething()
return
Ou:
fun = ->
doSomething()
undefined
C'est ce que le doc recommande, lors de l'utilisation de compréhensions:
Veillez à ne pas renvoyer accidentellement les résultats de la compréhension dans ces cas, en ajoutant une valeur de retour significative - comme true - ou null, au bas de votre fonction .
Vous pouvez cependant écrire un wrapper comme celui-ci:
voidFun = (fun) ->
->
fun(arguments...)
return
(Remarquez l' opérateur splat ici ( ...
))
Et utilisez-le comme ceci lors de la définition des fonctions:
fun = voidFun ->
doSomething()
doSomethingElse()
Ou comme ça:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
ou null
à la fin de ma fonction. Cependant, l'ajout null
me semble faux pour une raison quelconque. Ai-je raison de supposer que c'est le pire choix parmi les trois?
undfined
à la fin. L'utilisation d'une return
instruction vide semble n'exprimer rien de mieux que de laisser un undefined
à la fin de la fonction, donc le vide return
semble être la meilleure option.
fun(arguments...)
, il vaudrait mieux appeler fun.apply(this, arguments)
.
Oui, avec un return
comme dernière ligne d'une fonction.
Par exemple,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Si vous souhaitez voir en quoi js le café se compile, essayez http://bit.ly/1enKdRl . (J'ai utilisé coffeescript redux pour mon exemple)
Juste quelque chose d'amusant (ctional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
elle-même est une fonction qui ne renvoie toujours rien. Vous pouvez utiliser compose pour diriger votre valeur de retour dans ce trou noir et la fonction composée ne retournera jamais rien.
Il semble que les fonctions de CoffeeScript doivent toujours renvoyer quelque chose, même null
. En C, vous avez void
comme type de retour.
->
, la fonction vide, compile vers (function() {})
, donc c'est la seule fonction qui ne renvoie rien.
return;
fonctionne en C, JavaScript et CoffeeScript pour renvoyer une valeur void.