开发者

Were `do...while` loops left out of CoffeeScript...?

开发者 https://www.devze.com 2023-03-06 18:04 出处:网络
In CoffeeScript, the while loop comes standard: while x() y() However, the following1 doesn\'t work: do y()

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消