CoffeeScript 1.7 is shaping up to be a pretty kick-ass release with significant improvements. Here are the ones I'm most excited about, in order of my own excitement.
Years of being wished for, finally granted!
result = range 1, 3
.concat range 4, 6
.map (x) -> x * x
.filter (x) -> x % 2 is 0
console.log result # [4, 16, 36]
$ 'body'
.click (e) ->
$ '.box'
.fadeIn 'fast'
.addClass '.active'
.css 'marginRight', '10px'
These two both solve roughly the same problem:
jashkenas/coffeescript#3246
jashkenas/coffeescript#3256
These'll finally let you wrap long strings (e.g. user-facing messages) without breaking your code's indentation, or manually stripping newlines out. I've been wanting these for so long!
if true
if not false
console.log 'Hello world.
This is a long line of text
that I’d like split in my code.'
# equivalent to:
if true
if not false
console.log 'Hello world. This is a long line of text that I’d like split in my code.'
console.log '''
By default, prefixed CSS will rewrite original files.
If you didn't set input files, autoprefixer will \
read from stdin stream.
Output CSS will be written to stdout stream on \
`-o -' argument or stdin input.
'''
# equivalent to:
desc = '''
By default, prefixed CSS will rewrite original files.
If you didn't set input files, autoprefixer will read from stdin stream.
Output CSS will be written to stdout stream on `-o -' argument or stdin input.
'''
The name sounds confusing, but this is straightforward:
# to get the first and last, what you have to do today:
[first, middle..., last] = array
# what you can do now:
[first, ..., last] = array
But here's the killer use for it:
# what you have to do today to get the last element in an array:
last = array[array.length - 1]
# or if you, like me, like to use features to their fullest:
[last] = array[-1..]
# what you can do now:
[..., last] = array
- Power operator
**
- Floor division operator
//
- Correct modulo operator
%%
(respects negatives)
I remember wishing for each one of these when I worked on Seadragon Ajax!
Not a huge deal to most people, but I've frequently wondered about this.
regex = /// <link\ href="#{URL}" ///
Like Streamline.js and others, extending Node's require()
to automatically compile CoffeeScript files is now an explicit action. This now prevents versioning conflicts, etc. with nested local CoffeeScript dependencies.
# if you're working with the compiler programmatically:
CoffeeScript = require 'coffee-script'
CoffeeScript.register()
# or, e.g. for Mocha configuration
require 'coffee-script/register'
Like the title says. This brings the coffee
executable closer in line with node
. There's still a little room for improvement (e.g. if your main file is named app.coffee
), but this is already a great step forward.
Phew! Talk about a powerful list.
My undying gratitute to the contributors of the above pull requests. A special shout-out to @xixixao in particular for contributing about half of them! Thank you all very, very much.
Looking forward to CoffeeScript 1.7!
@Anonyfox CoffeeScript already has function style pattern matching(i.e.
head = ([x, xs...]) -> x
). The RegEx testing operator has already been suggested and denied.