What is the most concise equivalent Coffeescript to the following:
# ruby
3.times { puts 'hi' }
?
The best I could think of is:
# coffeescript
for n in [1..3]
console.log 'hi'
console.log 'hi' for [1..3]
To also handle 0
correctly:
console.log 'hi' for [1..n] if n
Or with prototype magic:
Number::times = (fn) ->
do fn for [1..@valueOf()] if @valueOf()
return
3.times -> console.log 'hi'
Note that the second method isn't recommended because changing the Number
prototype has global effects.
Edit: Changed according to @BrianGenisio's comment (.prototype.
-> ::
)
Edit 2: fixed handling of 0, thanks @Brandon
Since you're already using Underscore.js along with CoffeeScript:
_(3).times -> console.log('hi')
JavaScript arrays (at least the modern ones) have a forEach
method and CoffeeScript [1..3]
ranges are arrays so you could do this:
[1..3].forEach -> console.log 'hi'
One warning though: this might be a bit hard on the browser if your n
in [1..n]
is large as you'll be building a large array just to get a convenient notation; but if n
is small then the overhead of building the array shouldn't matter that much.
console.log 'hi' for[]in length:3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With