Dans CoffeeScript, la boucle while
est standard:
while x()
y()
Cependant, ce qui suit1 ne fonctionne pas:
do
y()
while x()
Et ceci est tout simplement du sucre pour le premier exemple:
y() while x()
CoffeeScript est-il livré avec une boucle intégrée qui s'exécute au moins une fois?
1En passant, do
is un mot-clé - il est utilisé pour appeler des fonctions anonymes.
La documentation CoffeeScript dit:
La seule boucle de bas niveau fournie par CoffeeScript est la boucle while.
Je ne connais pas de boucle intégrée qui s'exécute au moins une fois, donc je suppose que l'alternative est
loop
y()
break if x()
Je sais que cette réponse est très ancienne, mais depuis que je suis entré ici via Google, j'ai pensé que quelqu'un d'autre pourrait aussi bien.
Pour construire une boucle do ... while équivalente dans CoffeeScript, je pense que cette syntaxe l'émule la meilleure et la plus facile et qu'elle est très lisible:
while true
# actions here
break unless # conditions here
Votre supposition est correcte: il n'y a pas de do-while
équivalent dans CoffeeScript. Donc, vous écriviez généralement
y()
y() while x()
Si vous faites cela souvent, vous pouvez définir une fonction d'aide:
doWhile = (func, condition) ->
func()
func() while condition()
J'ai trouvé que cela pouvait être accompli grâce à un court-circuit conditionnel:
flag = y() while not flag? or x()
J'ai travaillé sur un projet où je force simplement la condition à évaluer à la fin de la boucle, puis à terminer au début.
# set the 'do' variable to pass the first time
do = true
while do
# run your intended code
x()
# evaluate condition at the end of
# the while code block
do = condition
# continue code
Ce n'est pas très élégant, mais cela vous empêche de définir une nouvelle fonction juste pour votre bloc de code while et de l'exécuter deux fois. Il existe généralement un moyen de coder autour des instructions do ... while, mais pour ces périodes où vous ne pouvez pas, vous avez une solution simple.