ecma6 in the wild

28

Upload: codecampiasi

Post on 18-Jul-2015

24 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Ecma6 in the wild
Page 2: Ecma6 in the wild

ECMAScript 6 in the [email protected]

CodeCamp, 25.04.15, Iasi, Romania

Page 3: Ecma6 in the wild

Presentation online

Page 4: Ecma6 in the wild

About me

Page 5: Ecma6 in the wild

What?

● ECMAScript 6 (Harmony) will be behind the next major version of JavaScript

● To be released in June, 2015● ECMA5 was released in 2009● Fun fact: ECMA6 features were initially

planned for ECMA4

5

Page 6: Ecma6 in the wild

Why?

● Considerable set of new features and improvements

● Backwards-compatible, but unavoidable● Google, Mozilla, Yahoo!, PayPal, airbnb

6

Page 7: Ecma6 in the wild

OOP…?

7

Page 8: Ecma6 in the wild

Classes

8

Page 9: Ecma6 in the wild

Block scope

……

9

Page 10: Ecma6 in the wild

Arrow functions

10

Page 11: Ecma6 in the wild

Spread, rest, destructuring

11

Page 12: Ecma6 in the wild

And more...

● Tail call optimisation● Promises● Proxies● Generators● Object literal extensions● Modules● const

12

Page 13: Ecma6 in the wild

Where?

● New project started in October 2014● Frontend with complex logic/ algorithms● Around 8+ teammates● Decided to start using ECMA6 around

December

13

Page 14: Ecma6 in the wild

14

Page 15: Ecma6 in the wild

How?

● Transpilers: convert ES6 code to valid ES5● Babel (née 6to5), Traceur, Closure● Chosen the one with:

○ most new features implemented○ most useful features implemented

● Fortunately easy choice, Babel: babeljs.io

15

Page 16: Ecma6 in the wild

16

ECMA6 Code ECMA5 Code

Polyfill

BabelBrowserifyTransform

BrowserifyESLint

Grunt

Page 17: Ecma6 in the wild

So simple?

● Lucky because of existing Grunt/ Browserify setup

● Nevertheless, Babel is very easy to integrate in any workflow

● JSHint: replaced with ESLint● JSDoc: not working...

17

Page 18: Ecma6 in the wild

Are we human?

● Considerable learning curve● Old habits die hard

○ Crockford: “let is the new var”○ See “===” vs “==”

● “This doesn’t look like JavaScript anymore!”○ See the Class syntax○ “This is ugly!”: arrows, spread

18

Page 19: Ecma6 in the wild

We try...

● Didn’t change all code to ECMA6 idioms● Internal workshops● This presentation● Suggestions during code review● Convince, not coerce people

19

Page 20: Ecma6 in the wild

Features we use

● Arrow functions○ More concise callbacks○ Got rid of .bind() and other synonyms

● let● Template strings● Default parameter values● for … of● TODO: classes

20

Page 21: Ecma6 in the wild

To ∞ and ECMA7

● ECMA6 is nice● ECMA6 is unavoidable● We need to start being more adaptable:

○ One new standard specification per year○ Babel already includes ECMA7 features

● Transition is not easy, but it becomes harder with time

21

Page 24: Ecma6 in the wild

Your move.

Page 25: Ecma6 in the wild
Page 26: Ecma6 in the wild

Grunt/ Browserify/ Babel setup

Page 27: Ecma6 in the wild

ECMA7 features

● Object.observe● Async functions (turbocharged Promises)● Array comprehension● Reflection● SIMD

Page 28: Ecma6 in the wild

ECMA vs. ECMAScript

● ECMA is a standardisation body○ ECMA-334 - C# language specification○ ECMA-367 – Eiffel programming language○ ECMA-404 - JSON○ ECMA-408 - Dart programming language

● ECMA-262 - ECMAScript Language Specification, now at 6th (7th?) edition○ ECMA6 for brevity