53 votes

Des boucles `do ... while` ont-elles été laissées en dehors de CoffeeScript ...?

Dans CoffeeScript, la boucle while est standard:

 while x()
   y()
 

Cependant, le 1 suivant ne fonctionne pas:

 do
  y()
while x()
 

Et ceci est simplement du sucre pour le premier exemple:

 y() while x()
 

CoffeeScript est-il fourni avec une boucle intégrée qui s'exécute au moins une fois?

1 De plus, do est un mot clé - il est utilisé pour appeler des fonctions anonymes.

68voto

Alex Korban Points 7819

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 j'imagine que l'alternative est

 loop
  y()
  break if x()
 

24voto

adrenalin Points 546

Je sais que cette réponse est très ancienne, mais depuis que je suis entrée ici via Google, je pensais que quelqu'un d'autre pourrait en faire de même.

Pour construire un équivalent de boucle do ... while dans CoffeeScript, je pense que cette syntaxe est celle qui émule le mieux et est très lisible:

 while true
   # actions here
   break unless # conditions here
 

16voto

Trevor Burnham Points 43199

Votre estimation est correcte: il n'y a pas d'équivalent do-while dans CoffeeScript. Donc, vous écrivez généralement

 y()
y() while x()
 

Si vous le faites souvent, vous pouvez définir une fonction d'assistance:

 doWhile = (func, condition) ->
  func()
  func() while condition()
 

2voto

Sukima Points 2005

J'ai trouvé que cela pourrait être accompli à travers un court-circuit conditionnel:

 flag = y() while not flag? or x()
 

0voto

benja2729 Points 45

Je travaille sur un projet dans lequel je force simplement la condition à évaluer à la fin de la boucle, puis à la fin du 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 déclarations do ... while, mais pour les périodes où vous ne le pouvez pas, vous avez une solution simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X