Most of the JavaScript I have written over the last year has actually been CoffeeScript. It occurred to me the other day that I’m in the same mental mode whether I’m writing JS or CS and I think that is because at it’s heart CoffeeScript is just a more succinct way to write the same language.
There is very little extra functionality that you get with CoffeeScript that you couldn’t do with plain JS, it’s just nicer to write. A good example is the class
keyword, all it does is produce a constructor function with methods on the prototype
object – easy enough with JavaScript but more expressive and succinct with CoffeeScript.
class Bacon eat: -> 'nom'
Compiles to
function Bacon() {} Bacon.prototype.eat = function() { return 'nom'; };
If I were douchey enough I’d say it was like poetry. Actually I am and it is.
I think the reason for this is that CoffeeScript doesn’t change any of the fundamental rules of the language. this
still behaves the same way and you can still use call
and apply
to invoke functions however you like regardless of where they originate.
There was a brief period where loops would fake a new scope with an inner function but happily that’s gone. In fact the only fundamental change I can think of is that variables are local to the current scope by default and I think most people would agree that loosing var
is an improvement.
For me this is why compile to JS languages like Dart and TypeScript are completely uninteresting. I don’t want another language, just a way to write the words function
and prototype
a little less often and with fewer curly braces and semicolons.