2010-05-21 4 views
3

J'ai commencé à utiliser Javascript beaucoup plus, et par conséquent j'écris des choses assez complexes pour que l'organisation devienne une préoccupation. Cependant, cette question s'applique à n'importe quel langage qui vous permet d'imbriquer des fonctions. Essentiellement, quand devriez-vous utiliser une fonction anonyme sur une fonction globale ou interne nommée? Au début, je pensais que c'était la fonctionnalité la plus cool jamais, mais je pense que je vais à la mer. Voici un exemple que j'ai écrit récemment, ommiting toutes les variables delcarations et conditions afin que vous puissiez voir la structure.Quel est le moyen le plus propre d'utiliser des fonctions anonymes?

function printStream() { 
    return fold(function (elem, acc) { 
    ... 
    var comments = (function() { 
     return fold(function (comment, out) { 
     ... 
     return out + ...; 
     }, '', elem.comments); 
    return acc + ... + comments; 
    }, '', data.stream); 
} 

j'ai réalisé que (je pense) il y a une sorte de beauté dans sa compacité, il est probablement pas une bonne idée de le faire de la même manière que vous ne voudriez pas une tonne de code un double pour la boucle.

Répondre

1

Comme tout outil, cela dépend. Vous ne devriez pas toujours l'utiliser et vous ne devriez jamais l'utiliser. Vous devriez l'utiliser le cas échéant.

Vous devriez les utiliser là où c'est un simple 2 ou 3-liner et il n'y a aucune application pour l'utiliser ailleurs.

Vous devriez l'utiliser dans JavaScript où vous obtenez une fermeture pour isoler les variables dans le deal. Par-dessus tout, tant qu'un autre développeur peut regarder le code et "l'obtenir", c'est très bien. Quand je regarde l'exemple de code ci-dessus, je fais pas "get it".

+0

Le test "get it" est difficile si vous êtes un développeur solitaire. Il est difficile de juger si vous-même vous trouverez difficile plus tard quand vous reviendrez. Je pense que votre règle de base de 2-3 lignes est probablement une bonne que je vais suivre. Et je pense que je peux éviter la tentation de nicher complètement. –

1

Le nettoyage de vos fonctions anonymes dépend de ce qu'elles font et de leur durée. Ce que j'ai tendance à faire est d'avoir le plus possible de simples fonctions anonymes et d'appeler des fonctions définies en externe (définies en dehors du bloc de code ou dans un autre fichier ...) lorsque la fonction d'appel est longue/complexe au lieu de l'inscrire dans la fonction anonyme.

Cela rendrait le code plus lisible/lisible dans le cas où les fonctions sont longues. Cela devient également plus utile si les fonctions sont utilisées à plusieurs endroits - sinon la fonction serait simplement dupliquée là où elle est utilisée

1

Je pense que cela dépend de votre objectif et de votre application. Vous devez penser à la réutilisabilité et à la maintenabilité du code.

Si vous ne voulez plus jamais utiliser une fonction anonyme - utilisez-la comme vous le faites, mais si vous voulez réutiliser votre code, faites-en une fonction globale.

La maintenabilité est plus facile à fournir si vos appels de fonction ne sont pas anonymes.

Le débogage est parfois plus facile (message d'erreur: erreur dans la fonction {} n'aide pas beaucoup).

Questions connexes