SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
JavaScript in 2016
Eduard Tomàs
@eiximenis
ROME 18-19 MARCH 2016
Who am I?
Beer lover & crafter
Who am I?
Happy and proud father
Who am I?
Nerdy speaker ^_^
Who am I?
Developer @
• About JavaScript 
• How it was
• How it is now
• How it will be in the (near) future
What i will talk about?
No excuses to not use ES2015 now
Most features
already implemented
in modern browsers
For everything else…
Babel 
• Invented 20 years ago (1995) by Brendan Eich (in
Netscape) for using mainly as a scripting Language
• Currently in version 6 (this is the version we will
talking about)
• Version 6 is from 2015
• Previous version 5 is from 2009
• A lot of people still don’t use all version 5 features!
A bit of history...
• Getters and Setters
• strict mode
• Reflection
Underused v5 features
• A lot of new features...
• Three groups of features
• Minor improvements (mostly syntax sugar)
• New Language core features
• Other features
ECMAScript 2015 (aka v6)
• A lot of new features...
• Three groups of features
• Minor improvements (mostly syntax sugar)
• String interpolation, arrow functions, binary and octal literals, block
scope, enhanced object notation, new types (map, set, typed arrays)
• New Language core features
• Symbols, Iterators and generators, destructuring, classes
• Other features
• Promises, Modules, Proxies
ECMAScript 2015 (aka v6)
• A lot of new features...
• Three groups of features
• Minor improvements (mostly syntax sugar)
• String interpolation, arrow functions, binary and octal literals, block
scope, enhanced object notation, new types (map, set, typed arrays)
• New Language core features
• Symbols, Iterators and generators, destructuring, classes
• Other features
• Promises, Modules, Proxies
ECMAScript 2015 (aka v6)
Ready?
• A new, compact and cleaner syntax for creating a
function
Arrow Functions
function (i) {
return i*2;
}
i => i*2
• Very compact, easy to read
• A new, compact and cleaner syntax for creating a
function
• And they come with a gift: arrow operator preserves
context!
Arrow Functions
var Brewery = function(name) {
this.name = name;
this.beers = [];
this.getBeersWithFullName = function() {
return this.beers.map(function(element) {
return {
name: element.name + " by " + this.name,
style: element.style};
});
}
}
• A new, compact and cleaner syntax for creating a
function
• And they come with a gift: arrow operator preserves
context!
Arrow Functions
var Brewery = function(name) {
this.name = name;
this.beers = [];
this.getBeersWithFullName = function() {
return this.beers.map(function(element) {
return {
name: element.name + " by " + this.name,
style: element.style};
}.bind(this));
}
}
• A new, compact and cleaner syntax for creating a
function
• And they come with a gift: arrow operator preserves
context!
Arrow Functions
var Brewery = function(name) {
this.name = name;
this.beers = [];
this.getBeersWithFullName = function () {
return this.beers.map(e => ({
name: e.name + " by " + this.name,
style: e.style
}));
}
}
But be aware...
var x = {
nick: '1. eiximenis',
identify: () => console.log('I am ' + this.nick)
}
x.identify();
var X = function () {
this.nick = '2. eiximenis';
this.identify = () => console.log('I am ' + this.nick)
}
new X().identify();
• Pipe operator – Only syntax, but matters!
Maybe in the (near) future (ES7)...
function doubleSay(str) {
return str + ", " + str;
}
function capitalize(str) {
return str[0].toUpperCase() +
str.substring(1);
}
function exclaim(str) {
return str + '!';
}
let result = exclaim(capitalize(doubleSay("hello"))); // Hello, hello!
let result = "hello"|> doubleSay |> capitalize |> exclaim;
Destructuring
• You have an array with two values.
• How to assign these two values to two independent
variables?
var values = [42, 69];
var x = 42;
var y = 69;
var values = [42, 69];
var [x,y] = values;
• Works with objects too 
Destructuring
let obj = {a:10, b: 30, c:'Hello'};
let {a:x, c:y} = obj;
• Very easy to extract partial info of an object
let user= {
name:'eiximenis',
beers:[{id: 1, name: 'Moretti'},
{id: 2, name: 'Epidor'}],
city: 'Igualada'
};
let {name, beers: [,epidor]} = user;
• A very powerful operator that maps to “the rest
values of an iterable”
• Key concept is “rest” (only values not yet iterated are
apped to the array)
Spread operator
var lost = [4, 8, 15, 16, 23, 42];
var [,eight,fifteen,...others] = lost;
• Spread operator also maps an array to a N arguments
in a function
• A new fresh way to call functions from arrays without
need for apply
• In fact is far more powerful than apply...
Spread operator
let foo = function (a, b, c, d, e) { }
foo(10, ...[20, 30], 40, ...[50]);
• Last parameter of function can be prepended with
spread operator
• This parameter will contain an array with all extra
parameters passed to this function
Rest parameters
• It is like arguments but better...
• It is really an array
• Only contains non-named parameters
var foo = function (a, b, ...c) { }
foo(1, 1, 2, 3, 5);
Iterators and generators
• An iterator enables custom iteration over an object
• Is a function that returns an object (the iterator)
• Name of this function is Symbol.iterator
• Only one iterator per object
• Iterators are lazy, evaluated as values are needed
• Any object with an iterator is an iterable and
• Can be iterated using for...of
• Spread operator can map the object to an array
Iterators
• It’s a bit cumbersone...
Need to declare Symbol.iterator as a function that
returns an object
with only one function
called next that returns
an object
with two properties
value (the current value)
done (true if iteration finished)
Creating an iterator
Creating an iterator
let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[pre, cur] = [cur, pre + cur];
return { done: false, value: cur }
}
}
}
}
for (var n of fibonacci) {
if (n > 1000)
break;
console.log(n);
}
Generating iterators
for (var n of fibonacci) {
if (n > 1000)
break;
console.log(n);
}
var fibonacci = {
[Symbol.iterator]: function*() {
let pre = 0, cur = 1;
for (;;) {
[pre, cur] = [cur, pre + cur];
yield cur;
}
}
}
• Generators can be objects by themselves
• Can create a function that is a generator and iterate
over its values
Generators
function* lost() {
yield 4;
yield 8;
yield 15;
yield 16;
yield 23;
yield 42;
}
[...lost()];
• A generator can yield all values of another generator
using yield*
Chaining generators
function* lostrange(limit) {
for (let idx=0; idx<limit;idx++) {
yield idx;
yield* lost();
}
}
var lost = function* () {
yield 4;
yield 8;
yield 15;
yield 16;
yield 23;
yield 42;
}
• but classes allow some specific features unavailable in ES5, so...
• Objects must be created with new and classes do not
exist in runtime (typeof Point is ‘function’)
• This is equivalent to ES5 constructor pattern
Classes – The basics
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
• Properties (using the same ES5 get/set syntax)
• Inheritance (class Point3D extends Point)
• Prototype of Point3D objects will be a Point object
• Static methods
• Classes define the constructor pseudo-method
(invoked when object is creatred).
• Derived constructors must call base to call the base
constructor before using this
• But still...
Classes – The basics
Classes
No
private
methods!
But (of course) we can fake them 
• By defining all methods inside constructor as closures
(ES5 way to do this)
Faking classes private methods
class SimpleDay {
constructor(day) {
let _day = day;
this.getDay = function () {
return _day;
}
}
}
• By using Symbols to hide names
Faking classes private methods
let SimpleDay = (function () {
let _dayKey = Symbol();
class SimpleDay {
constructor(day) {
this[_dayKey] = day;
}
getDay() {
return this[_dayKey];
}
}
return SimpleDay;
}());
• By using Weak Map (preferred way)
Faking classes private methods
let SimpleDay = (function () {
let _days = new WeakMap();
class SimpleDay {
constructor(day) {
_days.set(this, day);
}
getDay() {
return _days.get(this);
}
}
return SimpleDay;
}());
• By using Weak Map (preferred way)
Faking classes private methods
let SimpleDay = (function () {
let _days = new WeakMap();
class SimpleDay {
constructor(day) {
_days.set(this, day);
}
getDay() {
return _days.get(this);
}
}
return SimpleDay;
}());
• External function can be avoided if using modules
• A function can return or receive a class
• This gives us an standard way of creating mixins
• Suppose a hierarchy of classes:
Classes are 1st class-citizens
class BarClass {
bar() {
console.log('Bar from BarClass');
}
}
class BazClass extends BarClass {
baz() {
console.log('Baz from BazClass');
}
}
Classes are 1st class-citizens
• We can declare a mixin:
let FooMixin = (sc) => class extends sc {
foo() {
console.log('FooMixin method');
}
}
• And apply it...
class BazFooClass extends FooMixin(BazClass) { }
var bfc = new BazFooClass();
bfc.bar(); // from superclass BarClass
bfc.baz(); // from bazclass
bfc.foo(); // from mixin
Modules
• Similar to CommonJS modules because
• Compact syntax
• Prefer single export
• Support for cyclic dependences
• Similar to AMD modules because
• Support for asynchronous module loading
• Configurable module loading
Modules ES6
Named exports
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
Any declaration prefixed by
“export” keyword is an export of
the module
Using import keyword we can
choose what of the exports of
the module we want to include
to the global namespace
//------ main.js ------
import { square, diag } from 'lib';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
Importing into namespace
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
Any declaration prefixed by
“export” keyword is an export of
the module
You can, of course, specify a
namespace for the import, keeping
the global namespace clean 
//------ main.js ------
import * as lib from 'lib';
console.log(lib.square(11)); // 121
console.log(lib.diag(4, 3)); // 5
Did you notice the use of * to import all the exports of a module?
Default export
Module exports a class (note the use
of default).
Default exports must be named on
import
Module exports just a function
//------ MyClass.js ------
export default class { ... };
//------ main2.js ------
import MyClass from 'MyClass';
let inst = new MyClass();
//------ myFunc.js ------
export default function () { ... };
//------ main1.js ------
import myFunc from 'myFunc';
myFunc();
• Mean to be the “most important” export
• Represents “the module” itself
• A module can have one default and so many named
exports
Default and named exports
Module ‘react-native’has so
many named exports (i. e.
Image, Text) and also has the
default export.
Default export is the most
important and represents
“the core of react”
This is a common pattern in JS (think about jQuery)
Modules
• Modules are statically defined and imported.
CommonJS allows for:
This is not allowed in ES6
Less flexibility but no need to execute the
code to find the imports or exports of a
module. Can be optimized.
var mylib;
if (Math.random()) {
mylib = require('foo');
} else {
mylib = require('bar');
}
Promises
• No more callbacks needed
• Promise encapsulates the task and its State (pending,
fulfilled or error found)
• Allows execution of code after its fulfillment or after
an error is found
• Can be chained
Promises – the basics
No more callback pyramid hell! 
But be aware of the
promise pyramid hell!! :S
Promises - usage
var pxhr = xhrget('http://www.plainconcepts.com/');
pxhr.then(function (req) {
console.log(req.responseText);
});
pxhr.catch(function(err) {
console.log('Oooops!');
});
• Assume xhrget is a function that returns a Promise for
loading a URL using GET
Promises – Sequential bad usage!
xhrget('https://httpbin.org/delay/4').
then(() => {
console.log('1st downloaded');
xhrget('https://httpbin.org/delay/3').
then(() => {
console.log('2nd downloaded');
xhrget('https://httpbin.org/delay/2').
then(() => {
console.log('all download')
})
})
})
Promises – Sequential usage
xhrget('https://httpbin.org/delay/4').
then(() => {
console.log ('1st downloaded');
return xhrget('https://httpbin.org/delay/3');
}).
then(() => {
console.log('2nd downloaded');
return xhrget('https://httpbin.org/delay/2');
}).
then(() => console.log('all downloaded'));
Promises – Parallel usage
Promise.all([
xhrget('https://httpbin.org/delay/4'),
(() => {
return xhrget('https://httpbin.org/delay/3');
})(),
(() => {
return xhrget('https://httpbin.org/delay/2');
})()
]).then((reqs) => console.log(...(reqs.map(i => i.responseURL))));
Promises - creating
var xhrget = function (url) {
var pr = new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function () {
if (req.readyState == XMLHttpRequest.DONE) {
if (req.status == 200) {
resolve(req);
}
else {
reject(new Error("Err " + req.status));
}
}
};
req.send(null);
});
return pr;
}
• Support for asynchronous will be in the core language
through async/await
• await -> a non-blocking wait over a promise. When an
await is found, code returns to its caller and when the
promise is fulfilled, the execution re-enters and
continues after the await
In the (near) future (ES7)...
(async function() {
doSomeSynchronousStuff();
await loadStoryAsync();
console.log("Done!");
}());
• Something similar could be done with ES6 with
promises and generators combined
• Develop using ES6 
• Take a look on ES7 proposals!!!! 
• Learn about reactive way to do things and even reactive
extensions
• New frameworks and libs (Flux/Redux/Cyclejs but also Angular2)
are heavy based on this.
• Invest in TypeScript or flow if you would like to have static
typing in ES
• Learn some funcional language, it will help you as JS is
everyday more functional 
What to look next?
Questions?
Ask any question
you have (no
answered
guaranteed :P)
Thanks!
ROME 18-19 MARCH 2016
Eduard Tomàs - @eiximenis
Plain Concepts
http://www.plainconcepts.com
All pictures belong
to their respective authors

Weitere ähnliche Inhalte

Was ist angesagt?

Angular Weekend
Angular WeekendAngular Weekend
Angular WeekendTroy Miles
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascriptDoeun KOCH
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016Manoj Kumar
 
JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6Solution4Future
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web DevsRami Sayar
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
Awesomeness of JavaScript…almost
Awesomeness of JavaScript…almostAwesomeness of JavaScript…almost
Awesomeness of JavaScript…almostQuinton Sheppard
 
Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Nilesh Jayanandana
 
Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017Arnaud Giuliani
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoMuhammad Abdullah
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overviewhesher
 
Daggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processorDaggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processorBartosz Kosarzycki
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is hereSebastiano Armeli
 

Was ist angesagt? (20)

Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascript
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016
 
Let's JavaScript
Let's JavaScriptLet's JavaScript
Let's JavaScript
 
JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Oojs 1.1
Oojs 1.1Oojs 1.1
Oojs 1.1
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web Devs
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Awesomeness of JavaScript…almost
Awesomeness of JavaScript…almostAwesomeness of JavaScript…almost
Awesomeness of JavaScript…almost
 
Pragmatic sbt
Pragmatic sbtPragmatic sbt
Pragmatic sbt
 
Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6Introduction to Ecmascript - ES6
Introduction to Ecmascript - ES6
 
Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demo
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
 
Daggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processorDaggerate your code - Write your own annotation processor
Daggerate your code - Write your own annotation processor
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is here
 

Andere mochten auch

Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Codemotion
 
Commodore 64 Mon Amour
Commodore 64 Mon AmourCommodore 64 Mon Amour
Commodore 64 Mon AmourCodemotion
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScriptCodemotion
 
474 Password Not Found
474 Password Not Found474 Password Not Found
474 Password Not FoundCodemotion
 
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016Codemotion
 
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...Codemotion
 

Andere mochten auch (6)

Wearable botnets 201560319_v3
Wearable botnets 201560319_v3Wearable botnets 201560319_v3
Wearable botnets 201560319_v3
 
Commodore 64 Mon Amour
Commodore 64 Mon AmourCommodore 64 Mon Amour
Commodore 64 Mon Amour
 
Reactive Programming with JavaScript
Reactive Programming with JavaScriptReactive Programming with JavaScript
Reactive Programming with JavaScript
 
474 Password Not Found
474 Password Not Found474 Password Not Found
474 Password Not Found
 
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016
The web is getting pushy - Phil Nash - Codemotion Amsterdam 2016
 
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
The Evolution of Asynchronous Javascript - Alessandro Cinelli - Codemotion Mi...
 

Ähnlich wie JavaScript in 2016

From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scalatod esking
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxDavid Rodenas
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CAlexis Gallagher
 
React Development with the MERN Stack
React Development with the MERN StackReact Development with the MERN Stack
React Development with the MERN StackTroy Miles
 
Intro to React
Intro to ReactIntro to React
Intro to ReactTroy Miles
 
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)Brendan Eich
 
Learn JavaScript by modeling Rubik Cube
Learn JavaScript by modeling Rubik CubeLearn JavaScript by modeling Rubik Cube
Learn JavaScript by modeling Rubik CubeManoj Kumar
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)arvind pandey
 
Why Java Sucks and C# Rocks (Final)
Why Java Sucks and C# Rocks (Final)Why Java Sucks and C# Rocks (Final)
Why Java Sucks and C# Rocks (Final)jeffz
 
Front end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreFront end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreWeb Zhao
 
Programming in java basics
Programming in java  basicsProgramming in java  basics
Programming in java basicsLovelitJose
 
Exciting JavaScript - Part I
Exciting JavaScript - Part IExciting JavaScript - Part I
Exciting JavaScript - Part IEugene Lazutkin
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoMatt Stine
 
The Present and Future of the Web Platform
The Present and Future of the Web PlatformThe Present and Future of the Web Platform
The Present and Future of the Web PlatformC4Media
 
C# 7 development
C# 7 developmentC# 7 development
C# 7 developmentFisnik Doko
 

Ähnlich wie JavaScript in 2016 (20)

From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scala
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
React Development with the MERN Stack
React Development with the MERN StackReact Development with the MERN Stack
React Development with the MERN Stack
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
 
Learn JavaScript by modeling Rubik Cube
Learn JavaScript by modeling Rubik CubeLearn JavaScript by modeling Rubik Cube
Learn JavaScript by modeling Rubik Cube
 
Unit ii
Unit iiUnit ii
Unit ii
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)
 
Why Java Sucks and C# Rocks (Final)
Why Java Sucks and C# Rocks (Final)Why Java Sucks and C# Rocks (Final)
Why Java Sucks and C# Rocks (Final)
 
Angular2 for Beginners
Angular2 for BeginnersAngular2 for Beginners
Angular2 for Beginners
 
Introduction to Kotlin
Introduction to KotlinIntroduction to Kotlin
Introduction to Kotlin
 
Front end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript coreFront end fundamentals session 1: javascript core
Front end fundamentals session 1: javascript core
 
ECMA5 and ES6 Promises
ECMA5 and ES6 PromisesECMA5 and ES6 Promises
ECMA5 and ES6 Promises
 
Programming in java basics
Programming in java  basicsProgramming in java  basics
Programming in java basics
 
Exciting JavaScript - Part I
Exciting JavaScript - Part IExciting JavaScript - Part I
Exciting JavaScript - Part I
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
The Present and Future of the Web Platform
The Present and Future of the Web PlatformThe Present and Future of the Web Platform
The Present and Future of the Web Platform
 
C# 7 development
C# 7 developmentC# 7 development
C# 7 development
 
JS Essence
JS EssenceJS Essence
JS Essence
 

Mehr von Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Mehr von Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Kürzlich hochgeladen

SEO Growth Program-Digital optimization Specialist
SEO Growth Program-Digital optimization SpecialistSEO Growth Program-Digital optimization Specialist
SEO Growth Program-Digital optimization SpecialistKHM Anwar
 
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.soniya singh
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...Neha Pandey
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsstephieert
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$kojalkojal131
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)Damian Radcliffe
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersDamian Radcliffe
 
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607dollysharma2066
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGAPNIC
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 

Kürzlich hochgeladen (20)

SEO Growth Program-Digital optimization Specialist
SEO Growth Program-Digital optimization SpecialistSEO Growth Program-Digital optimization Specialist
SEO Growth Program-Digital optimization Specialist
 
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girls
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
 
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOG
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
 
Call Girls In Noida 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In Noida 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICECall Girls In Noida 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In Noida 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 

JavaScript in 2016

  • 1. JavaScript in 2016 Eduard Tomàs @eiximenis ROME 18-19 MARCH 2016
  • 2. Who am I? Beer lover & crafter
  • 3. Who am I? Happy and proud father
  • 4. Who am I? Nerdy speaker ^_^
  • 6. • About JavaScript  • How it was • How it is now • How it will be in the (near) future What i will talk about?
  • 7. No excuses to not use ES2015 now Most features already implemented in modern browsers For everything else… Babel 
  • 8. • Invented 20 years ago (1995) by Brendan Eich (in Netscape) for using mainly as a scripting Language • Currently in version 6 (this is the version we will talking about) • Version 6 is from 2015 • Previous version 5 is from 2009 • A lot of people still don’t use all version 5 features! A bit of history...
  • 9. • Getters and Setters • strict mode • Reflection Underused v5 features
  • 10. • A lot of new features... • Three groups of features • Minor improvements (mostly syntax sugar) • New Language core features • Other features ECMAScript 2015 (aka v6)
  • 11. • A lot of new features... • Three groups of features • Minor improvements (mostly syntax sugar) • String interpolation, arrow functions, binary and octal literals, block scope, enhanced object notation, new types (map, set, typed arrays) • New Language core features • Symbols, Iterators and generators, destructuring, classes • Other features • Promises, Modules, Proxies ECMAScript 2015 (aka v6)
  • 12. • A lot of new features... • Three groups of features • Minor improvements (mostly syntax sugar) • String interpolation, arrow functions, binary and octal literals, block scope, enhanced object notation, new types (map, set, typed arrays) • New Language core features • Symbols, Iterators and generators, destructuring, classes • Other features • Promises, Modules, Proxies ECMAScript 2015 (aka v6)
  • 14.
  • 15. • A new, compact and cleaner syntax for creating a function Arrow Functions function (i) { return i*2; } i => i*2 • Very compact, easy to read
  • 16. • A new, compact and cleaner syntax for creating a function • And they come with a gift: arrow operator preserves context! Arrow Functions var Brewery = function(name) { this.name = name; this.beers = []; this.getBeersWithFullName = function() { return this.beers.map(function(element) { return { name: element.name + " by " + this.name, style: element.style}; }); } }
  • 17. • A new, compact and cleaner syntax for creating a function • And they come with a gift: arrow operator preserves context! Arrow Functions var Brewery = function(name) { this.name = name; this.beers = []; this.getBeersWithFullName = function() { return this.beers.map(function(element) { return { name: element.name + " by " + this.name, style: element.style}; }.bind(this)); } }
  • 18. • A new, compact and cleaner syntax for creating a function • And they come with a gift: arrow operator preserves context! Arrow Functions var Brewery = function(name) { this.name = name; this.beers = []; this.getBeersWithFullName = function () { return this.beers.map(e => ({ name: e.name + " by " + this.name, style: e.style })); } }
  • 19.
  • 20. But be aware... var x = { nick: '1. eiximenis', identify: () => console.log('I am ' + this.nick) } x.identify(); var X = function () { this.nick = '2. eiximenis'; this.identify = () => console.log('I am ' + this.nick) } new X().identify();
  • 21. • Pipe operator – Only syntax, but matters! Maybe in the (near) future (ES7)... function doubleSay(str) { return str + ", " + str; } function capitalize(str) { return str[0].toUpperCase() + str.substring(1); } function exclaim(str) { return str + '!'; } let result = exclaim(capitalize(doubleSay("hello"))); // Hello, hello! let result = "hello"|> doubleSay |> capitalize |> exclaim;
  • 22.
  • 23. Destructuring • You have an array with two values. • How to assign these two values to two independent variables? var values = [42, 69]; var x = 42; var y = 69; var values = [42, 69]; var [x,y] = values;
  • 24. • Works with objects too  Destructuring let obj = {a:10, b: 30, c:'Hello'}; let {a:x, c:y} = obj; • Very easy to extract partial info of an object let user= { name:'eiximenis', beers:[{id: 1, name: 'Moretti'}, {id: 2, name: 'Epidor'}], city: 'Igualada' }; let {name, beers: [,epidor]} = user;
  • 25. • A very powerful operator that maps to “the rest values of an iterable” • Key concept is “rest” (only values not yet iterated are apped to the array) Spread operator var lost = [4, 8, 15, 16, 23, 42]; var [,eight,fifteen,...others] = lost;
  • 26. • Spread operator also maps an array to a N arguments in a function • A new fresh way to call functions from arrays without need for apply • In fact is far more powerful than apply... Spread operator let foo = function (a, b, c, d, e) { } foo(10, ...[20, 30], 40, ...[50]);
  • 27. • Last parameter of function can be prepended with spread operator • This parameter will contain an array with all extra parameters passed to this function Rest parameters • It is like arguments but better... • It is really an array • Only contains non-named parameters var foo = function (a, b, ...c) { } foo(1, 1, 2, 3, 5);
  • 29. • An iterator enables custom iteration over an object • Is a function that returns an object (the iterator) • Name of this function is Symbol.iterator • Only one iterator per object • Iterators are lazy, evaluated as values are needed • Any object with an iterator is an iterable and • Can be iterated using for...of • Spread operator can map the object to an array Iterators
  • 30. • It’s a bit cumbersone... Need to declare Symbol.iterator as a function that returns an object with only one function called next that returns an object with two properties value (the current value) done (true if iteration finished) Creating an iterator
  • 31. Creating an iterator let fibonacci = { [Symbol.iterator]() { let pre = 0, cur = 1; return { next() { [pre, cur] = [cur, pre + cur]; return { done: false, value: cur } } } } } for (var n of fibonacci) { if (n > 1000) break; console.log(n); }
  • 32.
  • 33. Generating iterators for (var n of fibonacci) { if (n > 1000) break; console.log(n); } var fibonacci = { [Symbol.iterator]: function*() { let pre = 0, cur = 1; for (;;) { [pre, cur] = [cur, pre + cur]; yield cur; } } }
  • 34. • Generators can be objects by themselves • Can create a function that is a generator and iterate over its values Generators function* lost() { yield 4; yield 8; yield 15; yield 16; yield 23; yield 42; } [...lost()];
  • 35. • A generator can yield all values of another generator using yield* Chaining generators function* lostrange(limit) { for (let idx=0; idx<limit;idx++) { yield idx; yield* lost(); } } var lost = function* () { yield 4; yield 8; yield 15; yield 16; yield 23; yield 42; }
  • 36. • but classes allow some specific features unavailable in ES5, so...
  • 37. • Objects must be created with new and classes do not exist in runtime (typeof Point is ‘function’) • This is equivalent to ES5 constructor pattern Classes – The basics class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; } }
  • 38. • Properties (using the same ES5 get/set syntax) • Inheritance (class Point3D extends Point) • Prototype of Point3D objects will be a Point object • Static methods • Classes define the constructor pseudo-method (invoked when object is creatred). • Derived constructors must call base to call the base constructor before using this • But still... Classes – The basics
  • 40. • By defining all methods inside constructor as closures (ES5 way to do this) Faking classes private methods class SimpleDay { constructor(day) { let _day = day; this.getDay = function () { return _day; } } }
  • 41. • By using Symbols to hide names Faking classes private methods let SimpleDay = (function () { let _dayKey = Symbol(); class SimpleDay { constructor(day) { this[_dayKey] = day; } getDay() { return this[_dayKey]; } } return SimpleDay; }());
  • 42. • By using Weak Map (preferred way) Faking classes private methods let SimpleDay = (function () { let _days = new WeakMap(); class SimpleDay { constructor(day) { _days.set(this, day); } getDay() { return _days.get(this); } } return SimpleDay; }());
  • 43. • By using Weak Map (preferred way) Faking classes private methods let SimpleDay = (function () { let _days = new WeakMap(); class SimpleDay { constructor(day) { _days.set(this, day); } getDay() { return _days.get(this); } } return SimpleDay; }()); • External function can be avoided if using modules
  • 44. • A function can return or receive a class • This gives us an standard way of creating mixins • Suppose a hierarchy of classes: Classes are 1st class-citizens class BarClass { bar() { console.log('Bar from BarClass'); } } class BazClass extends BarClass { baz() { console.log('Baz from BazClass'); } }
  • 45. Classes are 1st class-citizens • We can declare a mixin: let FooMixin = (sc) => class extends sc { foo() { console.log('FooMixin method'); } } • And apply it... class BazFooClass extends FooMixin(BazClass) { } var bfc = new BazFooClass(); bfc.bar(); // from superclass BarClass bfc.baz(); // from bazclass bfc.foo(); // from mixin
  • 47. • Similar to CommonJS modules because • Compact syntax • Prefer single export • Support for cyclic dependences • Similar to AMD modules because • Support for asynchronous module loading • Configurable module loading Modules ES6
  • 48. Named exports //------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } Any declaration prefixed by “export” keyword is an export of the module Using import keyword we can choose what of the exports of the module we want to include to the global namespace //------ main.js ------ import { square, diag } from 'lib'; console.log(square(11)); // 121 console.log(diag(4, 3)); // 5
  • 49. Importing into namespace //------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } Any declaration prefixed by “export” keyword is an export of the module You can, of course, specify a namespace for the import, keeping the global namespace clean  //------ main.js ------ import * as lib from 'lib'; console.log(lib.square(11)); // 121 console.log(lib.diag(4, 3)); // 5 Did you notice the use of * to import all the exports of a module?
  • 50. Default export Module exports a class (note the use of default). Default exports must be named on import Module exports just a function //------ MyClass.js ------ export default class { ... }; //------ main2.js ------ import MyClass from 'MyClass'; let inst = new MyClass(); //------ myFunc.js ------ export default function () { ... }; //------ main1.js ------ import myFunc from 'myFunc'; myFunc(); • Mean to be the “most important” export • Represents “the module” itself
  • 51. • A module can have one default and so many named exports Default and named exports Module ‘react-native’has so many named exports (i. e. Image, Text) and also has the default export. Default export is the most important and represents “the core of react” This is a common pattern in JS (think about jQuery)
  • 52. Modules • Modules are statically defined and imported. CommonJS allows for: This is not allowed in ES6 Less flexibility but no need to execute the code to find the imports or exports of a module. Can be optimized. var mylib; if (Math.random()) { mylib = require('foo'); } else { mylib = require('bar'); }
  • 54. • No more callbacks needed • Promise encapsulates the task and its State (pending, fulfilled or error found) • Allows execution of code after its fulfillment or after an error is found • Can be chained Promises – the basics
  • 55. No more callback pyramid hell! 
  • 56. But be aware of the promise pyramid hell!! :S
  • 57. Promises - usage var pxhr = xhrget('http://www.plainconcepts.com/'); pxhr.then(function (req) { console.log(req.responseText); }); pxhr.catch(function(err) { console.log('Oooops!'); }); • Assume xhrget is a function that returns a Promise for loading a URL using GET
  • 58. Promises – Sequential bad usage! xhrget('https://httpbin.org/delay/4'). then(() => { console.log('1st downloaded'); xhrget('https://httpbin.org/delay/3'). then(() => { console.log('2nd downloaded'); xhrget('https://httpbin.org/delay/2'). then(() => { console.log('all download') }) }) })
  • 59. Promises – Sequential usage xhrget('https://httpbin.org/delay/4'). then(() => { console.log ('1st downloaded'); return xhrget('https://httpbin.org/delay/3'); }). then(() => { console.log('2nd downloaded'); return xhrget('https://httpbin.org/delay/2'); }). then(() => console.log('all downloaded'));
  • 60. Promises – Parallel usage Promise.all([ xhrget('https://httpbin.org/delay/4'), (() => { return xhrget('https://httpbin.org/delay/3'); })(), (() => { return xhrget('https://httpbin.org/delay/2'); })() ]).then((reqs) => console.log(...(reqs.map(i => i.responseURL))));
  • 61. Promises - creating var xhrget = function (url) { var pr = new Promise(function (resolve, reject) { var req = new XMLHttpRequest(); req.open('GET', url, true); req.onreadystatechange = function () { if (req.readyState == XMLHttpRequest.DONE) { if (req.status == 200) { resolve(req); } else { reject(new Error("Err " + req.status)); } } }; req.send(null); }); return pr; }
  • 62. • Support for asynchronous will be in the core language through async/await • await -> a non-blocking wait over a promise. When an await is found, code returns to its caller and when the promise is fulfilled, the execution re-enters and continues after the await In the (near) future (ES7)... (async function() { doSomeSynchronousStuff(); await loadStoryAsync(); console.log("Done!"); }()); • Something similar could be done with ES6 with promises and generators combined
  • 63. • Develop using ES6  • Take a look on ES7 proposals!!!!  • Learn about reactive way to do things and even reactive extensions • New frameworks and libs (Flux/Redux/Cyclejs but also Angular2) are heavy based on this. • Invest in TypeScript or flow if you would like to have static typing in ES • Learn some funcional language, it will help you as JS is everyday more functional  What to look next?
  • 64. Questions? Ask any question you have (no answered guaranteed :P)
  • 65. Thanks! ROME 18-19 MARCH 2016 Eduard Tomàs - @eiximenis Plain Concepts http://www.plainconcepts.com All pictures belong to their respective authors