web-dev-qa-db-fra.com

Comment puis-je convertir une boucle for JavaScript en CoffeeScript?

for (i = 0; i < 10; i++) {

    doStuff();

}

C'est le code JavaScript que je veux convertir en CoffeeScript.

70
Shamoon
doStuff() for i in [0 .. 9]

Ceci est expliqué sur la page d'introduction: http://coffeescript.org/#loops

Édition/mise à jour par JP:

La traduction exacte est:

doStuff() for i in [0...10]

Vous devez être prudent avec le ".." vs "...", par exemple:

count = 0
doStuff() for i in [0..count] #still executes once!

Donc tu penses, pas de problème ... Je vais juste boucler jusqu'au compte-1!

count = 0
doStuff() for i in [0..count-1] #executes twice!! '0' and then '-1'

Traduction littérale de:

for (var i = 0; i < someCount; ++i)
  doStuff()

est

for i in [0...someCount]
  doStuff()   
110
jontro

La réponse marquée est fonctionnellement correcte mais le code généré ne correspond pas au javascript d'origine.
La bonne façon (lire, celle la plus proche du javascript suivant)

for (i = 0; i < 10; i++) {
  doStuff();
}

est doStuff() for i in [0..someCount] by 1 Notez le par 1 sur la boucle for.

Maintenant, ce code crée toujours une variable _i Supplémentaire. Si vous ne pouvez pas vivre avec, utilisez ce qui suit:

i=0
while i<=someCount
  doStuff()
  i++
19
Olivier Refalo

Les réponses précédentes fonctionnent. Cependant, supprimer le i le génère mieux pour moi:

for [0...10]
  doStuff()

ou

doStuff() for [0...10]

Les autres solutions ajoutent une variable d'itérateur supplémentaire i à utiliser à l'intérieur de la boucle, par exemple doStuff(i), mais à partir de http://coffeescript.org/v1/# boucles :

Si vous n'avez pas besoin de la valeur d'itération actuelle, vous pouvez l'omettre:

browser.closeCurrentTab() for [0...count]

En détail, la traduction de for i in [0...10] Est for (i = j = 0; j < 10; i = ++j), tandis que la traduction de for [0...10] Est for (i = 0; i < 10; i++).

Notez la discussion dans d'autres commentaires sur 2 points par rapport à 3 points ([0..9] Vs [0...10]).

1
stevo