Skip to content

bevry-archive/coffeescript-to-esnext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 

Repository files navigation

CoffeeScript to ES6

A guide to migrate from CoffeeScript to ES6 / ES7 / ES2015

Why

Classes

class A
  # Static method that uses rest parameters
  @create: (args...) -> new this(args...)
  
  # Constructor that applies first argument to this.name
  constructor: (@name) ->
  
  # Default value for name for class A
  name: 'Default name for A'

class B extends A
  # Default value for name for class B
  name: 'Default name for B'

b1 = B.create()
alert(b1.name)

b2 = B.create('ben')
alert(b2.name)
class A {
  // Static method that uses rest parameters
  static create (...args) {
    return new this(...args)
  }
  // Constructor that applies first argument to this.name
  constructor (name) {
    this._name = name
  }
  // Default value for name for class A
  get name () {
    return this._name || 'Default name for A'
  }
  // Necessary setter
  set name (value) {
    this._name = name
  }
}

class B extends A {
  // Default value for name for class B
  get name () {
    return this._name || 'Default name for B'
  }
}

let b1 = B.create()
alert(b1.name)

let b2 = B.create('ben')
alert(b2.name)

Notes:

  • arguments is discouraged, use rest parameters instead:
  • HOWEVER, if you can get away with doing (a,b,c,d,e,f,g,etc) instead of (...args), then do that, ...args currently has some profiling issues - (@pflannery will add details about the issues later)

Traversing data object

data = {name:'ben', company:'bevry'}
for own key, value of data
  alert(key+': '+value)
let data = new Map().set('name', 'ben').set('company', 'bevry')
data.forEach(function(value, key){
  alert(key+': '+value)
})

Notes:

  • using objects for data is discouraged, Map is the new data object:
  • HOWEVER, Maps aren't there yet, and unless you have a large dataset, objects are fine (especially for configuration, options, and general coding things) - (@pflannery will add details about the issues later)

Benchmarks

See bevry/es6-benchmarks for performance benchmarks between ES5, CoffeeScript and ES6

Showcase

Here is a listing of CoffeeScript projects that have switched to ES6 so you can compare their source code:

Contributing

Pull requests encouraged!

License

Public Domain via the CC0 1.0 Universal License

About

A guide to migrate from CoffeeScript to ES6 / ES7 / ES2015

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published