Were `do...while` loops left out of CoffeeScript...?
In CoffeeScript, the while
loop comes standard:
while x()
y()
However, the following1 doesn't work:
do
y()
while x()
And this is simply sugar for the first example:
y() while x()
Does CoffeeScript come with a built-in loop that executes at least once?
1As an aside, do
is a keywo开发者_Go百科rd — it's used to call anonymous functions.
The CoffeeScript documentation says:
The only low-level loop that CoffeeScript provides is the while loop.
I don't know of a built-in loop that executes at least once, so I guess the alternative is
loop
y()
break if x()
I know that this answer is very old, but since I entered here via Google, I thought someone else might as well.
To construct a do...while loop equivalent in CoffeeScript I think that this syntax emulates it the best and easiest and is very readable:
while true
# actions here
break unless # conditions here
Your guess is correct: There is no do-while
equivalent in CoffeeScript. So you'd typically write
y()
y() while x()
If you find yourself doing this often, you might define a helper function:
doWhile = (func, condition) ->
func()
func() while condition()
I found this could be accomplished through a short circuit conditional:
flag = y() while not flag? or x()
I've been working on a project where I simply force the condition to evaluate at the end of the loop, then terminate at the beginning.
# 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
It's not very elegant, but it does keep you from defining a new function just for your while code block and running it twice. There generally is a way to code around the do...while statements, but for those time that you can't you have a simple solution.
精彩评论