J'ai quelques fonctions qui recevront occasionnellement (pas toujours) un rappel et l'exécuteront. Est-ce que vérifier si le rappel est défini / fonctionne est un bon style ou existe-t-il un meilleur moyen?
Exemple:
function save (callback){
.....do stuff......
if(typeof callback !== 'undefined'){
callback();
};
};
javascript
coding-style
callback
henry.oswald
la source
la source
typeof callback !== undefined
alors laissez de côté le'
save()
? Cela ne donnera-t-il pas une erreur ou un avertissement pelucheux parce qu'il manque un argument? Ou c'est parfaitement ok et le rappel est tout simplementundefined
?Réponses:
Je préfère personnellement
typeof callback === 'function' && callback();
La
typeof
commande est cependant douteuse et ne doit être utilisée que pour"undefined"
et"function"
Le problème avec le
typeof !== undefined
est que l'utilisateur peut transmettre une valeur définie et non une fonctionla source
typeof
n'est pas douteux. C'est parfois vague, mais je n'appellerais pas cela douteux. Cependant, il est convenu que si vous appelez le rappel en tant que fonction, il est préférable de vérifier qu'il s'agit bien d'une fonction et non, vous savez, d'un numéro. :-)"object"
95% du temps.typeof
ne cause pas la boxe.typeof "foo"
est"string"
, non"object"
. C'est en fait le seul moyen réel de savoir si vous avez affaire à une chaîne primitive ou à unString
objet. (Peut-être que vous pensez àObject.prototype.toString
, ce qui est très pratique , mais cause la boxe.)&&
d'ailleurs..toString
c'est charmant pour trouver le[[Class]]
.Vous pouvez également faire:
C'est particulièrement utile si vous utilisez le
callback
dans quelques endroits.De plus, si vous utilisez
jQuery
, vous avez déjà une fonction comme celle-là, elle s'appelle $ .noopla source
callback = callback || function(){};
function save (callback=noop) { ...
Faites simplement
Je préfère appeler le callback s'il est fourni, quel que soit son type. Ne le laissez pas échouer silencieusement, afin que l'implémenteur sache qu'il a passé un argument incorrect et peut le réparer.
la source
ECMAScript 6
la source
Plutôt que de rendre le rappel facultatif, attribuez simplement une valeur par défaut et appelez-la quoi qu'il arrive
Lorsqu'elle est utilisée
Un tel style est appelé style de passage continu . Voici un exemple réel
combinations
, qui génère toutes les combinaisons possibles d'une entrée ArrayParce qu'il
combinations
est défini dans le style de passage de continuation, l'appel ci-dessus est effectivement le mêmeNous pouvons également passer une suite personnalisée qui fait autre chose avec le résultat
Le style de continuation peut être utilisé avec des résultats étonnamment élégants
la source
J'étais tellement fatigué de voir ce même extrait encore et encore, j'ai écrit ceci:
J'ai des centaines de fonctions qui font des choses comme
ou peu importe...
Je suis sceptique quant à l'ensemble de la stratégie «assurez-vous qu'il fonctionne». Les seules valeurs légitimes sont une fonction ou une fausse. Si quelqu'un passe un nombre non nul ou une chaîne non vide, qu'allez-vous faire? Comment le fait d'ignorer le problème le résout-il?
la source
save( { callback : confirmProfileSaved, priority: "low" })
Une fonction valide est basée sur le prototype Function, utilisez:
pour être sûr que le rappel est une fonction
la source
Si le critère d'exécution du rappel est que celui-ci soit défini ou non, alors tout va bien. Aussi, je suggère de vérifier si c'est vraiment une fonction en plus.
la source
Je suis sincèrement passé à coffee-script et j'ai trouvé que les arguments par défaut sont un bon moyen de résoudre ce problème
la source
Cela peut facilement être fait avec ArgueJS :
la source