SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
ECMASCRIPT 6 
@LuisCalvoDiaz 
@NachoNavaReus 
Noviembre 2014
Introducción 
HiSTORIA 
• Brendan Eich (Netscape) creó un lenguaje en 1995 para el cliente que denominó Mocha y luego Livescript. 
• Netscape firma con Sun Microsystem y cambia de nombre a Javascript antes del lanzamiento en Netscape Navigator 2.0. (Marzo 1996) 
• Microsoft lanzó JScript con Internet Explorer 3. Dialecto compatible que añadía alguna funcionalidad más. (Agosto 1996) 
• Envío de especificación Javascript 1.1 al organismo ECMA (European Computer Manufacturers Association) en Noviembre 1996. 
• TC39 creó ECMA-262 (Junio 1997)
Introducción 
Versiones 
Versión Fecha Detalles 
1.0 Junio 1997 
2.0 Junio 1998 Cambios para conservar la especificación con la ISO/IEC 16262 
3.0 Diciembre 1999 Se añaden expresiones regulares, se mejora el manejo de string, try/catch, y algunas otras mejoras 
4.0 Abandonada Edición abandonada debido a diferencias referentes a la complejidad del lenguaje. 
5.0 Diciembre 2009 ‘strict mode’, aclara ambigüedades de la 3.0, añade algunas características como getters, setters, soporte para JSON, ... 
5.1 Junio 2011 Edición alineada con la tercera edición de ISO/IEC 16262:2011 
6 Work in progress A ello vamos... 
7 Work in progress Está muy verde aún.
NUEVAS 
VARIABLES 
CONST 
LET 
1
Ecmascript 6 : Variables 
Const: IE11, Firefox 11+, Chrome 19+, Opera 17+ 
Hasta ahora nos hemos visto obligados a : var CONSTANTE = 20; 
// x: constante 
const x = 20; 
console.log(x); // 20 
x = 1; 
console.log(x); // 20 
// N o cam bia el valor de x
Ecmascript 6 : Variables 
Let: IE11, Firefox 28+, Chrome* 17+, Opera* 17+ 
var a = 1; 
var b = 2; 
{ 
var c = 3; 
} 
console.info(a, b, c); // 1 2 3 
let a = 1; 
let b = 2; 
{ 
let c = 3; 
} 
console.info(a, b, c); 
// ReferenceError: c is not defined 
var i = "i"; 
var tem poral = "tem poral"; 
for(let i = 1; i != false; i = false){ 
let tem poral = 10; 
} 
console.log(i, tem poral); // i tem poral
DEFINICIONES 
DE MÉTODOS 
get, set 
functionName() 
2
Ecmascript 6 : Definiciones de métodos 
name() : No soportada aún. 
ES5.1 : get() y set() 
var BigLoco = { 
locoNam e: 'G ordon', 
get nam e() { return this.locoNam e; }, 
set nam e(n) { this.locoNam e = n } 
}; 
console.log(BigLoco.nam e); // 'G ordon' 
ES6 : Cualquier función 
var Steam Engine = { 
color: 'blue', 
get nam e() { return 'Thom as' }, 
start() { console.log('Hurry up!'); }, 
stop() { console.log('G ood job!'); } 
}; 
console.log('M y nam e is', Steam Engine.nam e); 
Steam Engine.start(); 
Steam Engine.stop();
NUEVA SINTAXIS 
DE FUNCIONES 
Arrow ( => ) 
Valores por defecto 
function(...values) 
3
Ecmascript 6 : Nueva sintaxis de funciones 
Función Arrow ( => ): Firefox 22+ 
// First syntax 
([param ] [, param ]) = > { statem ents } 
// Second syntax 
param = > expression 
var num bers = [10, 21, 15, 8]; 
// prints "[true, false, false, true]" 
console.log( 
num bers.m ap(function(num ber) { 
return num ber % 2 = = = 0; 
}) 
); 
var num bers = [10, 21, 15, 8]; 
// prints "[true, false, false, true]" 
console.log( 
num bers.m ap(num ber = > num ber % 2 = = = 0) 
);
Ecmascript 6 : Nueva sintaxis de funciones 
Función Arrow ( => ): Firefox 22+ 
var jane = { 
nam e: "Jane", 
logHello: function (friends) { 
friends.forEach(function (friend) { 
console.log(this.nam e + " says hello to " . 
friend.nam e); 
friend.done = true; 
}); 
} 
} 
var jane = { 
nam e: "Jane", 
logHello: function (friends) { 
friends.forEach((friend) = > { 
this.nam e + " says hello to " + friend; 
friend.done = true; 
}); 
} 
} 
También nos ayuda a solucionar problemas referentes a this.
Ecmascript 6 : Nueva sintaxis de funciones 
Valores por defecto: Firefox 15+ 
function Person(nam e) { 
// Set default values 
nam e = nam e || 'Juan'; 
this.toString = function() { 
return 'M y nam e is ' + nam e; 
} 
}; 
function Person(nam e = 'Juan') { 
this.toString = function() { 
return 'M y nam e is ' + nam e; 
} 
}; 
function prod(num ber1 = 1, num ber2) { } 
function Person(nam e, surnam e, usernam e = nam e + ' ' + surnam e) { }
Ecmascript 6 : Nueva sintaxis de funciones 
Rest parameter: Firefox 15+ 
Permite introducir un número arbitrario de parámetros en una función. 
function presentation(nam e, surnam e, ...otherInfo) { 
console.log('M i nom bre es ' + nam e + ' ' + surnam e); 
if (otherInfo.length > 0) { 
console.log('O tra inform ación: ' + otherInfo.join(', ')); 
} 
} 
presentation('Juan', 'Rodríguez'); 
// "M i nom bre es Juan Rodríguez" 
presentation('N acho', 'Navarro', 'hom bre', 'Español', 'D esarrollador W eb'); 
// "M y nam e is Nacho Navarro" 
// "O tra inform ación: hom bre, Español, D esarrollador w eb"
ITERATORS, ITERABLE 
GENERATORS 
ITERATORS 
ITERABLES 
FOR...OF 
GENERATORS 
4
Ecmascript 6 : Iterators, generators. 
Iterators 
Objetos con un solo método: next(), que puede devolver: 
● { done: false, value: elem } 
● { done: true[, value: retVal] } 
function createArrayIterator(arr) { 
let index = 0; 
return { 
next() { 
if (index < arr.length) { 
return { done: false, value: arr[index+ + ] }; 
} else { 
return { done: true }; 
} 
} 
} 
}
Ecmascript 6 : Iterators, generators. 
Iterables 
Las estructuras de datos sobre las que se puede iterar se conocen como ‘iterables’ en ECMAScript 6. 
function createIterableArray(arr) { 
return { 
[Sym bol.iterator]() { // protocol: iterable 
return this.iterator; // an iterator! 
}, 
iterator: { 
let index = 0; 
return { 
next() { // protocol: iterator 
... 
} 
} 
} 
} 
} 
next() { 
if (index < arr.length) { 
return { done: false, value: arr[index+ + ] }; 
} else { 
return { done: true }; 
} 
}
Ecmascript 6 : Iterators, generators. 
The for-of loop: Firefox 13+, Chrome+ 38, Opera+ 25 
El nuevo bucle for-of trabaja con iterables. 
function createIterableArray(arr) { 
return { 
[Sym bol.iterator]() { // protocol: iterable 
return this.iterator; // an iterator! 
}, 
iterator: { 
... 
} 
} 
} 
const arr = [ 'red', 'green', 'blue' ]; 
for(let x of createIterableArray(arr)) { 
console.log(x); 
}
Ecmascript 6 : Iterators, generators. 
The for-of loop: Firefox 13+, Chrome+ 38, Opera+ 25 
En ECMAScript 6, array es iterable. 
let arr = ['foo', 'bar', 'baz']; 
for (let elem ent of arr)) { 
console.log(elem ent); 
} 
//foo 
//bar 
//baz
Ecmascript 6 : Iterators, generators. 
Generators: Firefox 27+, Chrome 21+, Opera 17 
Generators son un tipo especial de funciones que pueden ser suspendidas y reanudadas 
function* generatorFunction() { 
yield 1; 
yield 2; 
} 
> let genO bj = generatorFunction(); 
> genO bj.next() 
{ done: false, value: 1 } 
> genO bj.next() 
{ done: false, value: 2 } 
> genO bj.next() 
{ done: true }
Ecmascript 6 : Iterators, generators. 
Generators (ii) 
function* fibonacci() { 
let [prev, curr] = [0, 1]; 
while (1) { 
[prev, curr] = [curr, prev + curr]; 
yield curr; 
} 
} 
let seq = fibonacci(); 
console.log(seq.next()); // { done: false, value: 1} 
console.log(seq.next()); // { done: false, value: 2} 
console.log(seq.next()); // { done: false, value: 3} 
console.log(seq.next()); // { done: false, value: 5} 
console.log(seq.next()); // { done: false, value: 8} 
)
Ecmascript 6 : Iterators, generators. 
Generators (iii): Recursividad 
function recursivelyIterateThrough( som ething ) { 
if ( tim eToStop() ) { 
return w hatever(); 
} 
recursivelyIterateThrough( m oreW ork ); 
} 
function* recursivelyIterateThrough( som ething ) { 
if ( tim eToStop() ) { 
yield w hatever(); 
} 
yield* recursivelyIterateThrough( m oreW ork ); 
}
Ecmascript 6 : Iterators, generators. 
Generators (iv): Recursividad 
function* iterTree(tree) { 
if (Array.isArray(tree)) { 
for(let i= 0; i < tree.length; i+ + ) {// inner node 
yield* iterTree(tree[i]); // (*) recursion 
} 
} else { // leaf 
yield tree; 
} 
} 
const tree = [ 'a', ['b', 'c'], ['d', 'e'] ]; 
for(let x of iterTree(tree)) { 
console.log(x); 
} 
//”a” “b” “c” “d” “e”
Métodos 
de Array 
Array.from. 
Array.find. 
Array.findIndex. 
Array.prototype.keys. 
Array.prototype.values. 
Array.prototype.fill 
5
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.find(): Firefox 24+, Chrome 35+, Opera 22+ (EEJ). 
Devuelve el valor si lo encuentra, o undefined. 
Array.prototype.find(callback[, thisArg]) 
Callback parámetros: 
● element 
● index 
● array 
var array = [1, 2, 3, 4]; 
var result = array .find(function(elem) {return elem % 2 === 0;}); 
//imprime 2 porque es el primer elemento par 
console.log(result);
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.findIndex(): Firefox 24+, Chrome 35+, Opera 22+ (EEJ). 
Igual que Array.prototype.find(), pero devuelve la posición. 
Array.prototype.findIndex(callback[, thisArg]) 
Callback parámetros: 
● element 
● index 
● array 
var array = [1, 2, 3, 4]; 
var result = array .findIndex(function(elem) {return elem % 2 === 0;}); 
//imprime 1 porque es el primer elemento par 
console.log(result);
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.values(): Firefox 28+, Chrome 35+, Opera 22+ (EEJ). 
Devuelve un nuevo Array Iterator que contiene los valores del array. 
Array.prototype.values() 
var array = [8, 55, 43, 14]; 
var iterator = array .values(); 
// Imprime "8, 55, 43, 14", una cada vez 
var element= iterator.next(); 
while(!element.done) { 
console.log(element.value); 
element= iterator.next(); 
}
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.keys(): Firefox 28+, Chrome 35+, Opera 22+ (EEJ). 
Igual que Array.prototype.values(), pero devuelve un Array Iterator que contiene las claves del array 
Array.prototype.keys() 
var array = [8, 55, 43, 14]; 
var iterator = array .keys(); 
// Imprime "0, 1, 2, 3", una cada vez 
var index = iterator.next(); 
while(!index.done) { 
console.log(index.value); 
index = iterator.next(); 
}
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.keys(): Firefox 31+, Chrome 37+, Opera 24+ (EEJ). 
Array.prototype.fill(value[, start[, end]]); 
Default values: 
● start = 0. 
● end = Array.length. 
● Si start o end son negativos, las posiciones son calculadas desde el final del array 
var array = new Array(6); 
// Esta sentencia rellena posiciones desde la 0 hasta la 2. 
array .fill(1, 0, 3); 
// Esta sentencia rellena el array desde la posición 3 hasta el final del mismo. 
array .fill(2, 3); 
// imprime [1, 1, 1, 2, 2, 2] 
console.log(array );
Ecmascript 6 : Nuevos métodos de Array 
Array.prototype.fill(): Firefox 31+, Chrome 37+, Opera 24+ (EEJ). 
Array.prototype.fill(value[, start[, end]]); 
Default values: 
● start = 0. 
● end = Array.length. 
● Si start o end son negativos, las posiciones son calculadas desde el final del array 
var array = new Array(6); 
// Esta sentencia rellena posiciones desde la 0 hasta la 2. 
array .fill(1, 0, 3); 
// Esta sentencia rellena el array desde la posición 3 hasta el final del mismo. 
array .fill(2, 3); 
// imprime [1, 1, 1, 2, 2, 2] 
console.log(array );
MÓDULOS EN 
ECMASCRIPT 6 
COMMONJS & AMD 
IMPORT 
EXPORT 
META-DATA 
BENEFICIOS 
6
Módulos 
Javascript no tiene soporte nativo para módulos. Destacan dos workarounds: 
COMMONJS 
● Sintaxis compacta. 
● Diseñado para carga síncrona. 
● Soporte dependencias cíclicas. 
● Principal uso: Servidores. 
● Implementación dominante: NodeJs. 
AMD 
● Sintaxis más complicada. 
● Diseñado para carga asíncrona. 
● No soporta dependencias cíclicas 
● Principal uso: Browsers. 
● Implementación más popular: RequireJs.
Módulos 
Exports 
//------ lib.js ------ 
export const sqrt = M ath.sqrt; 
export function square(x) { 
return x * x; 
} 
export function diag(x, y) { 
return sqrt(square(x) + square(y)); 
} 
//------ m ain.js ------ 
im port { square, diag } from 'lib'; 
console.log(square(11)); // 121 
console.log(diag(4, 3)); // 5 
//------ m ain.js ------ 
im port * as lib from 'lib'; 
console.log(lib.square(11)); // 121 
console.log(lib.diag(4, 3)); // 5
Módulos 
Default Export 
//------ m yFunc.js ------ 
export default function () { ... }; 
//------ m ain1.js ------ 
im port m yFunc from 'm yFunc'; 
m yFunc(); 
//------ M yClass.js ------ 
export default class { ... }; 
//------ m ain2.js ------ 
im port M yClass from 'M yClass'; 
let inst = new M yClass(); 
Sólo puede haber un default export por módulo.
Módulos 
Multiple exports con un default export 
//------ underscore.js ------ 
export default function (obj) { 
... 
}; 
export function each(obj, iterator, context) { 
... 
} 
//------ m ain.js ------ 
im port _, { each as loop} from 'underscore';
Módulos 
Más sobre ‘exports’ 
export var m yVar1 = ...; 
export let m yVar2 = ...; 
export const M Y_CO NST = ...; 
export function m yFunc() { 
... 
} 
export function* m yG eneratorFunc() { 
... 
} 
export class M yClass { 
... 
} 
Existen dos maneras de exportar los elementos del módulo: 
● Marcar declaraciones con la palabra clave export. 
● Listar todo lo que quieras exportar al final del módulo. 
const M Y_CO NST = ...; 
function m yFunc() { 
... 
} 
export { M Y_CO NST as THE_CO NST, m yFunc as theFunc };
Módulos 
Importando 
// D efault exports and nam ed exports 
im port theD efault, { nam ed1, nam ed2 } from 'src/m ylib'; 
im port theD efault from 'src/m ylib'; 
im port { nam ed1, nam ed2 } from 'src/m ylib'; 
// Renam ing: im port nam ed1 as m yNam ed1 
im port { nam ed1 as m yN am ed1, nam ed2 } from 'src/m ylib'; 
// Im porting the m odule as an object 
// (w ith one property per nam ed export) 
im port * as m ylib from 'src/m ylib'; 
// O nly load the m odule, don’t im port anything 
im port 'src/m ylib';
Módulos 
Re-exportando 
Re-expotar es añadir otras exportaciones de otros módulos a las de nuestro módulo. 
// Podem os expotar todo el m ódulo 
export * from 'src/other_m odule'; 
// Podem os ser m ás selectivos 
export { foo, bar } from 'src/other_m odule'; 
// Exportar foo de otro m ódulo, com o m yFoo 
export { foo as m yFoo, bar } from 'src/other_m odule';
Módulos 
Meta data 
Tenemos acceso a ciertos meta-datos del módulo a través de ‘this’. 
im port { nam e, url } from this m odule; 
console.log(url); 
//Tam bién podem os acceder vía objeto. 
im port * as m etaD ata from this m odule; 
console.log(m etaD ata.url);
Módulos 
API de carga de módulos 
Nos permite trabajar asíncronamente y configurar la carga de un módulo. 
System .im port('som e_m odule') 
.then(som e_m odule = > { 
... 
}) 
.catch(error = > { 
... 
}); 
System.import() te permite usar módulos dentro de la etiqueta <script>. 
Prom ise.all( 
['m odule1', 'm odule2', 'm odule3'] 
.m ap(x = > System .im port(x))) 
.then(function ([m odule1, m odule2, m odule3]) { 
});
Módulos 
Beneficios 
● Sintaxis elegante. 
● Soporta dependencias cíclicas. 
● Trabaja síncrona y asíncronamente. 
● No más UMD (Universal Module Definition).
NUEVOS MÉTODOS 
DE NUMBER 
Number.isInteger() 
Number.isNan() 
Number.isFinite() 
Number.isSafeInteger() 
Number.parseInt() 
7
Ecmascript 6 : Number 
Number.isInteger(): Firefox 16+, Chrome 34+, Opera21*+ 
Num ber.isInteger(value) 
// true 
console.log(Num ber.isInteger(19)); 
// false 
console.log(Num ber.isInteger(3.5)); 
// false 
console.log(Num ber.isInteger([1, 2, 3]));
Ecmascript 6 : Number 
Number.isNaN(): Firefox 16+, Chrome 19+, Opera17*+ 
window.isNaN() ya existía. Pero... 
console.log(w indow .isN aN (0/0)); 
console.log(w indow .isN aN ('test')); 
console.log(w indow .isN aN (undefined)); 
console.log(w indow .isN aN ({prop: 'value'})); 
// true 
// true 
// true 
// true
Ecmascript 6 : Number 
Number.isNaN(): Firefox 16+, Chrome 19+, Opera17*+ 
Number.isNaN() se comporta de forma diferente. 
console.log(Num ber.isN aN (0/0)); 
console.log(Num ber.isN aN (N aN )); 
console.log(Num ber.isN aN (undefined)); 
console.log(Num ber.isN aN ({prop: 'value'})); 
// true 
// true 
// false 
// false
Ecmascript 6 : Number 
Number.isFinite(): Firefox 16+, Chrome 19+, Opera17*+ 
window.isFinite() también existía. 
console.log(w indow .isFinite(10)); 
console.log(w indow .isFinite(Num ber.M AX_VALUE)); 
console.log(w indow .isFinite(null)); 
console.log(w indow .isFinite([])); 
// true 
// true 
// true 
// true
Ecmascript 6 : Number 
Number.isFinite(): Firefox 16+, Chrome 19+, Opera17*+ 
Num ber.isFinite(value) se comporta de forma diferente. 
console.log(Num ber.isFinite(10)); 
console.log(Num ber.isFinite(Num ber.M AX_VALUE)); 
console.log(Num ber.isFinite(null)); 
console.log(Num ber.isFinite([])); 
// true 
// true 
// false 
// false
Ecmascript 6 : Number 
Number.isSafeInteger(): Firefox 16+, Chrome 19+, Opera17*+ 
● Safe integers: Aquellos enteros desde el -(2 - 1) inclusive hasta el 2 - 1 
● Num ber.isSafeInteger(value) 
console.log(Num ber.isSafeInteger(5)); // im prim e "true" 
console.log(Num ber.isSafeInteger('19')); // im prim e "false" 
console.log(Num ber.isSafeInteger(M ath.pow (2, 53))); // im prim e "false" 
console.log(Num ber.isSafeInteger(M ath.pow (2, 53) - 1)); // im prim e "true" 
53 53
Ecmascript 6 : Number 
Number.parseInt(), Number.parseFloat: Firefox 16+, Chrome 19+, Opera17*+ 
Num ber.parseInt(valor [, base]) 
// im prim e "-3" 
console.log(Num ber.parseInt('-3')); 
// im prim e "4" 
console.log(Num ber.parseInt('100', 2)); 
// im prim e "N aN" 
console.log(Num ber.parseInt('test')); 
// im prim e "N aN" 
console.log(Num ber.parseInt({})); 
Num ber.parseFloat(valor) 
// im prim e "42.1" 
console.log(N um ber.parseFloat('42.1')); 
// im prim e "NaN" 
console.log(N um ber.parseFloat('test')); 
// im prim e "NaN" 
console.log(N um ber.parseFloat({}));
MAP 
PROTOTYPE 
MAP PROTOTYPE 
8
Map 
Map: Firefox, Chrome* , Opera* 
var array = [['key1', 'value1'], ['key2', 100]]; 
var m ap = new M ap(array); 
console.log(m ap.get('key1')); //‘value1’ 
m ap.set({'a' : 'b'}, 'tres'); 
console.log(m ap.get({'a' : 'b'})); //undefined; 
var array2 = ['lentejas', 'lim on']; 
m ap.set(array2, 'exquisito'); 
console.log(m ap.get(array2)); //exquisito; 
console.log(m ap.size); //4; 
for(let x of m ap){ 
console.log(x); 
} 
for(let x of m ap.values()){ 
console.log(x); 
} 
m ap.forEach(function(value, key, m ap){ 
console.log(value); 
}); 
m ap.delete(array2); //true; 
m ap.has('no estoy'); //false;
CLASS, 
SUBCLASS 
CLASS 
SUBCLASS 
9
Class, subclass 
Class, class extends 
// Superclass 
class Person { 
constructor(nam e) { 
this.nam e = nam e; 
} 
describe() { 
return "Person called " + this.nam e; 
} 
} 
// Subclass 
class Em ployee extends Person { 
constructor(nam e, title) { 
super.constructor(nam e); 
this.title = title; 
} 
describe() { 
return super.describe() + " (" + this.title + ")"; 
} 
}
Class, subclass 
Uso de Class 
let jane = new Em ployee("Jane", "CTO "); 
jane instanceof Person; //true 
jane instanceof Em ployee //true 
jane.describe() //Person called Jane (CTO )
ES6 
PROXY 
ES6 PROXY 
10
EC6 PROXY 
var designer= { nam e:'M ontalvo', salary: 50 }; 
var interceptor = { 
set: function (receiver, property, value) { 
console.log(property, 'is changed to', value); 
receiver[property] = value; 
} 
}; 
designer = new Proxy(designer, interceptor); 
designer .salary = 60; 
//salary is changed to 60 
Operation Intercepted as 
proxy[name] handler.get(proxy, name) 
proxy[name] = val handler.set(proxy, name, val) 
name in proxy handler.has(name) 
delete proxy[name] handler.delete(name) 
for (var name in proxy) {...} handler.iterate() 
Object.keys(proxy) handler.keys()
Recursos y fuentes 
Recursos: 
http://addyosmani.com/blog/ecmascript-6-resources-for-the-curious-javascripter/ 
Fuentes: 
https://developer.mozilla.org 
http://www.sitepoint.com/ 
https://github.com/lukehoban/es6features 
http://ariya.ofilabs.com/ 
http://www.2ality.com/ 
http://addyosmani.com/ 
https://leanpub.com/
Esto es todo 
MUCHAS GRACIAS :)
Contacto: 
@LuisCalvoDíaz 
lcalvo@paradigmatecnologico.com 
@NachoNavaReus 
inavarro@stratio.com

Más contenido relacionado

La actualidad más candente

Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)Pablo Haya
 
Tema 5 - Metodología programación (I)
Tema 5 - Metodología programación (I)Tema 5 - Metodología programación (I)
Tema 5 - Metodología programación (I)Pablo Haya
 
Tema 4 - Tipos datos avanzados (II)
Tema 4 - Tipos datos avanzados (II)Tema 4 - Tipos datos avanzados (II)
Tema 4 - Tipos datos avanzados (II)Pablo Haya
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++cemayoral
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)Pablo Haya
 
Semana 3 Fundamentos de Python(Funciones y Métodos)
Semana 3   Fundamentos de Python(Funciones y Métodos)Semana 3   Fundamentos de Python(Funciones y Métodos)
Semana 3 Fundamentos de Python(Funciones y Métodos)Richard Eliseo Mendoza Gafaro
 
Programación C++
Programación C++Programación C++
Programación C++Juan Islas
 
Creacion de una librería propia en C
Creacion de una librería propia en CCreacion de una librería propia en C
Creacion de una librería propia en CRonny Parra
 
Librerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CLibrerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CCristian Maza
 

La actualidad más candente (20)

Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Tema 5 - Metodología programación (I)
Tema 5 - Metodología programación (I)Tema 5 - Metodología programación (I)
Tema 5 - Metodología programación (I)
 
Tema 4 - Tipos datos avanzados (II)
Tema 4 - Tipos datos avanzados (II)Tema 4 - Tipos datos avanzados (II)
Tema 4 - Tipos datos avanzados (II)
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Librerias ansi c
Librerias ansi cLibrerias ansi c
Librerias ansi c
 
Prolog file
Prolog fileProlog file
Prolog file
 
Introduccion a Python
Introduccion a PythonIntroduccion a Python
Introduccion a Python
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Qué hay de nuevo en PHP 7.2
Qué hay de nuevo en PHP 7.2Qué hay de nuevo en PHP 7.2
Qué hay de nuevo en PHP 7.2
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)
 
Semana 3 Fundamentos de Python(Funciones y Métodos)
Semana 3   Fundamentos de Python(Funciones y Métodos)Semana 3   Fundamentos de Python(Funciones y Métodos)
Semana 3 Fundamentos de Python(Funciones y Métodos)
 
Programación C++
Programación C++Programación C++
Programación C++
 
Interbloqueos salcedo carrero.doc
Interbloqueos salcedo carrero.docInterbloqueos salcedo carrero.doc
Interbloqueos salcedo carrero.doc
 
Creacion de una librería propia en C
Creacion de una librería propia en CCreacion de una librería propia en C
Creacion de una librería propia en C
 
Ejercicios propuestos 10
Ejercicios propuestos 10Ejercicios propuestos 10
Ejercicios propuestos 10
 
Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Librerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CLibrerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación C
 

Destacado

Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsParadigma Digital
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOParadigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for DevelopersParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 

Destacado (15)

Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEO
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for Developers
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
HTML5 Web Components
HTML5 Web ComponentsHTML5 Web Components
HTML5 Web Components
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 

Similar a ECMAScript 6: Características clave (20)

Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#IF-ELSE EN Csharp C#
IF-ELSE EN Csharp C#
 
Programacion en python_2
Programacion en python_2Programacion en python_2
Programacion en python_2
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Cpp
CppCpp
Cpp
 
Cpp
CppCpp
Cpp
 
C# calculadora
C# calculadoraC# calculadora
C# calculadora
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Ejercicio propuesto 2
Ejercicio propuesto 2Ejercicio propuesto 2
Ejercicio propuesto 2
 
Ejemplos java
Ejemplos javaEjemplos java
Ejemplos java
 
Clase integracion matlab
Clase integracion matlabClase integracion matlab
Clase integracion matlab
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScript
 

Más de Paradigma Digital

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Paradigma Digital
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxParadigma Digital
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixParadigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 

Más de Paradigma Digital (14)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
Seminario Apache Solr
Seminario Apache SolrSeminario Apache Solr
Seminario Apache Solr
 

Último

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 

Último (20)

tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 

ECMAScript 6: Características clave

  • 1. ECMASCRIPT 6 @LuisCalvoDiaz @NachoNavaReus Noviembre 2014
  • 2. Introducción HiSTORIA • Brendan Eich (Netscape) creó un lenguaje en 1995 para el cliente que denominó Mocha y luego Livescript. • Netscape firma con Sun Microsystem y cambia de nombre a Javascript antes del lanzamiento en Netscape Navigator 2.0. (Marzo 1996) • Microsoft lanzó JScript con Internet Explorer 3. Dialecto compatible que añadía alguna funcionalidad más. (Agosto 1996) • Envío de especificación Javascript 1.1 al organismo ECMA (European Computer Manufacturers Association) en Noviembre 1996. • TC39 creó ECMA-262 (Junio 1997)
  • 3. Introducción Versiones Versión Fecha Detalles 1.0 Junio 1997 2.0 Junio 1998 Cambios para conservar la especificación con la ISO/IEC 16262 3.0 Diciembre 1999 Se añaden expresiones regulares, se mejora el manejo de string, try/catch, y algunas otras mejoras 4.0 Abandonada Edición abandonada debido a diferencias referentes a la complejidad del lenguaje. 5.0 Diciembre 2009 ‘strict mode’, aclara ambigüedades de la 3.0, añade algunas características como getters, setters, soporte para JSON, ... 5.1 Junio 2011 Edición alineada con la tercera edición de ISO/IEC 16262:2011 6 Work in progress A ello vamos... 7 Work in progress Está muy verde aún.
  • 5. Ecmascript 6 : Variables Const: IE11, Firefox 11+, Chrome 19+, Opera 17+ Hasta ahora nos hemos visto obligados a : var CONSTANTE = 20; // x: constante const x = 20; console.log(x); // 20 x = 1; console.log(x); // 20 // N o cam bia el valor de x
  • 6. Ecmascript 6 : Variables Let: IE11, Firefox 28+, Chrome* 17+, Opera* 17+ var a = 1; var b = 2; { var c = 3; } console.info(a, b, c); // 1 2 3 let a = 1; let b = 2; { let c = 3; } console.info(a, b, c); // ReferenceError: c is not defined var i = "i"; var tem poral = "tem poral"; for(let i = 1; i != false; i = false){ let tem poral = 10; } console.log(i, tem poral); // i tem poral
  • 7. DEFINICIONES DE MÉTODOS get, set functionName() 2
  • 8. Ecmascript 6 : Definiciones de métodos name() : No soportada aún. ES5.1 : get() y set() var BigLoco = { locoNam e: 'G ordon', get nam e() { return this.locoNam e; }, set nam e(n) { this.locoNam e = n } }; console.log(BigLoco.nam e); // 'G ordon' ES6 : Cualquier función var Steam Engine = { color: 'blue', get nam e() { return 'Thom as' }, start() { console.log('Hurry up!'); }, stop() { console.log('G ood job!'); } }; console.log('M y nam e is', Steam Engine.nam e); Steam Engine.start(); Steam Engine.stop();
  • 9. NUEVA SINTAXIS DE FUNCIONES Arrow ( => ) Valores por defecto function(...values) 3
  • 10. Ecmascript 6 : Nueva sintaxis de funciones Función Arrow ( => ): Firefox 22+ // First syntax ([param ] [, param ]) = > { statem ents } // Second syntax param = > expression var num bers = [10, 21, 15, 8]; // prints "[true, false, false, true]" console.log( num bers.m ap(function(num ber) { return num ber % 2 = = = 0; }) ); var num bers = [10, 21, 15, 8]; // prints "[true, false, false, true]" console.log( num bers.m ap(num ber = > num ber % 2 = = = 0) );
  • 11. Ecmascript 6 : Nueva sintaxis de funciones Función Arrow ( => ): Firefox 22+ var jane = { nam e: "Jane", logHello: function (friends) { friends.forEach(function (friend) { console.log(this.nam e + " says hello to " . friend.nam e); friend.done = true; }); } } var jane = { nam e: "Jane", logHello: function (friends) { friends.forEach((friend) = > { this.nam e + " says hello to " + friend; friend.done = true; }); } } También nos ayuda a solucionar problemas referentes a this.
  • 12. Ecmascript 6 : Nueva sintaxis de funciones Valores por defecto: Firefox 15+ function Person(nam e) { // Set default values nam e = nam e || 'Juan'; this.toString = function() { return 'M y nam e is ' + nam e; } }; function Person(nam e = 'Juan') { this.toString = function() { return 'M y nam e is ' + nam e; } }; function prod(num ber1 = 1, num ber2) { } function Person(nam e, surnam e, usernam e = nam e + ' ' + surnam e) { }
  • 13. Ecmascript 6 : Nueva sintaxis de funciones Rest parameter: Firefox 15+ Permite introducir un número arbitrario de parámetros en una función. function presentation(nam e, surnam e, ...otherInfo) { console.log('M i nom bre es ' + nam e + ' ' + surnam e); if (otherInfo.length > 0) { console.log('O tra inform ación: ' + otherInfo.join(', ')); } } presentation('Juan', 'Rodríguez'); // "M i nom bre es Juan Rodríguez" presentation('N acho', 'Navarro', 'hom bre', 'Español', 'D esarrollador W eb'); // "M y nam e is Nacho Navarro" // "O tra inform ación: hom bre, Español, D esarrollador w eb"
  • 14. ITERATORS, ITERABLE GENERATORS ITERATORS ITERABLES FOR...OF GENERATORS 4
  • 15. Ecmascript 6 : Iterators, generators. Iterators Objetos con un solo método: next(), que puede devolver: ● { done: false, value: elem } ● { done: true[, value: retVal] } function createArrayIterator(arr) { let index = 0; return { next() { if (index < arr.length) { return { done: false, value: arr[index+ + ] }; } else { return { done: true }; } } } }
  • 16. Ecmascript 6 : Iterators, generators. Iterables Las estructuras de datos sobre las que se puede iterar se conocen como ‘iterables’ en ECMAScript 6. function createIterableArray(arr) { return { [Sym bol.iterator]() { // protocol: iterable return this.iterator; // an iterator! }, iterator: { let index = 0; return { next() { // protocol: iterator ... } } } } } next() { if (index < arr.length) { return { done: false, value: arr[index+ + ] }; } else { return { done: true }; } }
  • 17. Ecmascript 6 : Iterators, generators. The for-of loop: Firefox 13+, Chrome+ 38, Opera+ 25 El nuevo bucle for-of trabaja con iterables. function createIterableArray(arr) { return { [Sym bol.iterator]() { // protocol: iterable return this.iterator; // an iterator! }, iterator: { ... } } } const arr = [ 'red', 'green', 'blue' ]; for(let x of createIterableArray(arr)) { console.log(x); }
  • 18. Ecmascript 6 : Iterators, generators. The for-of loop: Firefox 13+, Chrome+ 38, Opera+ 25 En ECMAScript 6, array es iterable. let arr = ['foo', 'bar', 'baz']; for (let elem ent of arr)) { console.log(elem ent); } //foo //bar //baz
  • 19. Ecmascript 6 : Iterators, generators. Generators: Firefox 27+, Chrome 21+, Opera 17 Generators son un tipo especial de funciones que pueden ser suspendidas y reanudadas function* generatorFunction() { yield 1; yield 2; } > let genO bj = generatorFunction(); > genO bj.next() { done: false, value: 1 } > genO bj.next() { done: false, value: 2 } > genO bj.next() { done: true }
  • 20. Ecmascript 6 : Iterators, generators. Generators (ii) function* fibonacci() { let [prev, curr] = [0, 1]; while (1) { [prev, curr] = [curr, prev + curr]; yield curr; } } let seq = fibonacci(); console.log(seq.next()); // { done: false, value: 1} console.log(seq.next()); // { done: false, value: 2} console.log(seq.next()); // { done: false, value: 3} console.log(seq.next()); // { done: false, value: 5} console.log(seq.next()); // { done: false, value: 8} )
  • 21. Ecmascript 6 : Iterators, generators. Generators (iii): Recursividad function recursivelyIterateThrough( som ething ) { if ( tim eToStop() ) { return w hatever(); } recursivelyIterateThrough( m oreW ork ); } function* recursivelyIterateThrough( som ething ) { if ( tim eToStop() ) { yield w hatever(); } yield* recursivelyIterateThrough( m oreW ork ); }
  • 22. Ecmascript 6 : Iterators, generators. Generators (iv): Recursividad function* iterTree(tree) { if (Array.isArray(tree)) { for(let i= 0; i < tree.length; i+ + ) {// inner node yield* iterTree(tree[i]); // (*) recursion } } else { // leaf yield tree; } } const tree = [ 'a', ['b', 'c'], ['d', 'e'] ]; for(let x of iterTree(tree)) { console.log(x); } //”a” “b” “c” “d” “e”
  • 23. Métodos de Array Array.from. Array.find. Array.findIndex. Array.prototype.keys. Array.prototype.values. Array.prototype.fill 5
  • 24. Ecmascript 6 : Nuevos métodos de Array Array.prototype.find(): Firefox 24+, Chrome 35+, Opera 22+ (EEJ). Devuelve el valor si lo encuentra, o undefined. Array.prototype.find(callback[, thisArg]) Callback parámetros: ● element ● index ● array var array = [1, 2, 3, 4]; var result = array .find(function(elem) {return elem % 2 === 0;}); //imprime 2 porque es el primer elemento par console.log(result);
  • 25. Ecmascript 6 : Nuevos métodos de Array Array.prototype.findIndex(): Firefox 24+, Chrome 35+, Opera 22+ (EEJ). Igual que Array.prototype.find(), pero devuelve la posición. Array.prototype.findIndex(callback[, thisArg]) Callback parámetros: ● element ● index ● array var array = [1, 2, 3, 4]; var result = array .findIndex(function(elem) {return elem % 2 === 0;}); //imprime 1 porque es el primer elemento par console.log(result);
  • 26. Ecmascript 6 : Nuevos métodos de Array Array.prototype.values(): Firefox 28+, Chrome 35+, Opera 22+ (EEJ). Devuelve un nuevo Array Iterator que contiene los valores del array. Array.prototype.values() var array = [8, 55, 43, 14]; var iterator = array .values(); // Imprime "8, 55, 43, 14", una cada vez var element= iterator.next(); while(!element.done) { console.log(element.value); element= iterator.next(); }
  • 27. Ecmascript 6 : Nuevos métodos de Array Array.prototype.keys(): Firefox 28+, Chrome 35+, Opera 22+ (EEJ). Igual que Array.prototype.values(), pero devuelve un Array Iterator que contiene las claves del array Array.prototype.keys() var array = [8, 55, 43, 14]; var iterator = array .keys(); // Imprime "0, 1, 2, 3", una cada vez var index = iterator.next(); while(!index.done) { console.log(index.value); index = iterator.next(); }
  • 28. Ecmascript 6 : Nuevos métodos de Array Array.prototype.keys(): Firefox 31+, Chrome 37+, Opera 24+ (EEJ). Array.prototype.fill(value[, start[, end]]); Default values: ● start = 0. ● end = Array.length. ● Si start o end son negativos, las posiciones son calculadas desde el final del array var array = new Array(6); // Esta sentencia rellena posiciones desde la 0 hasta la 2. array .fill(1, 0, 3); // Esta sentencia rellena el array desde la posición 3 hasta el final del mismo. array .fill(2, 3); // imprime [1, 1, 1, 2, 2, 2] console.log(array );
  • 29. Ecmascript 6 : Nuevos métodos de Array Array.prototype.fill(): Firefox 31+, Chrome 37+, Opera 24+ (EEJ). Array.prototype.fill(value[, start[, end]]); Default values: ● start = 0. ● end = Array.length. ● Si start o end son negativos, las posiciones son calculadas desde el final del array var array = new Array(6); // Esta sentencia rellena posiciones desde la 0 hasta la 2. array .fill(1, 0, 3); // Esta sentencia rellena el array desde la posición 3 hasta el final del mismo. array .fill(2, 3); // imprime [1, 1, 1, 2, 2, 2] console.log(array );
  • 30. MÓDULOS EN ECMASCRIPT 6 COMMONJS & AMD IMPORT EXPORT META-DATA BENEFICIOS 6
  • 31. Módulos Javascript no tiene soporte nativo para módulos. Destacan dos workarounds: COMMONJS ● Sintaxis compacta. ● Diseñado para carga síncrona. ● Soporte dependencias cíclicas. ● Principal uso: Servidores. ● Implementación dominante: NodeJs. AMD ● Sintaxis más complicada. ● Diseñado para carga asíncrona. ● No soporta dependencias cíclicas ● Principal uso: Browsers. ● Implementación más popular: RequireJs.
  • 32. Módulos Exports //------ lib.js ------ export const sqrt = M ath.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } //------ m ain.js ------ im port { square, diag } from 'lib'; console.log(square(11)); // 121 console.log(diag(4, 3)); // 5 //------ m ain.js ------ im port * as lib from 'lib'; console.log(lib.square(11)); // 121 console.log(lib.diag(4, 3)); // 5
  • 33. Módulos Default Export //------ m yFunc.js ------ export default function () { ... }; //------ m ain1.js ------ im port m yFunc from 'm yFunc'; m yFunc(); //------ M yClass.js ------ export default class { ... }; //------ m ain2.js ------ im port M yClass from 'M yClass'; let inst = new M yClass(); Sólo puede haber un default export por módulo.
  • 34. Módulos Multiple exports con un default export //------ underscore.js ------ export default function (obj) { ... }; export function each(obj, iterator, context) { ... } //------ m ain.js ------ im port _, { each as loop} from 'underscore';
  • 35. Módulos Más sobre ‘exports’ export var m yVar1 = ...; export let m yVar2 = ...; export const M Y_CO NST = ...; export function m yFunc() { ... } export function* m yG eneratorFunc() { ... } export class M yClass { ... } Existen dos maneras de exportar los elementos del módulo: ● Marcar declaraciones con la palabra clave export. ● Listar todo lo que quieras exportar al final del módulo. const M Y_CO NST = ...; function m yFunc() { ... } export { M Y_CO NST as THE_CO NST, m yFunc as theFunc };
  • 36. Módulos Importando // D efault exports and nam ed exports im port theD efault, { nam ed1, nam ed2 } from 'src/m ylib'; im port theD efault from 'src/m ylib'; im port { nam ed1, nam ed2 } from 'src/m ylib'; // Renam ing: im port nam ed1 as m yNam ed1 im port { nam ed1 as m yN am ed1, nam ed2 } from 'src/m ylib'; // Im porting the m odule as an object // (w ith one property per nam ed export) im port * as m ylib from 'src/m ylib'; // O nly load the m odule, don’t im port anything im port 'src/m ylib';
  • 37. Módulos Re-exportando Re-expotar es añadir otras exportaciones de otros módulos a las de nuestro módulo. // Podem os expotar todo el m ódulo export * from 'src/other_m odule'; // Podem os ser m ás selectivos export { foo, bar } from 'src/other_m odule'; // Exportar foo de otro m ódulo, com o m yFoo export { foo as m yFoo, bar } from 'src/other_m odule';
  • 38. Módulos Meta data Tenemos acceso a ciertos meta-datos del módulo a través de ‘this’. im port { nam e, url } from this m odule; console.log(url); //Tam bién podem os acceder vía objeto. im port * as m etaD ata from this m odule; console.log(m etaD ata.url);
  • 39. Módulos API de carga de módulos Nos permite trabajar asíncronamente y configurar la carga de un módulo. System .im port('som e_m odule') .then(som e_m odule = > { ... }) .catch(error = > { ... }); System.import() te permite usar módulos dentro de la etiqueta <script>. Prom ise.all( ['m odule1', 'm odule2', 'm odule3'] .m ap(x = > System .im port(x))) .then(function ([m odule1, m odule2, m odule3]) { });
  • 40. Módulos Beneficios ● Sintaxis elegante. ● Soporta dependencias cíclicas. ● Trabaja síncrona y asíncronamente. ● No más UMD (Universal Module Definition).
  • 41. NUEVOS MÉTODOS DE NUMBER Number.isInteger() Number.isNan() Number.isFinite() Number.isSafeInteger() Number.parseInt() 7
  • 42. Ecmascript 6 : Number Number.isInteger(): Firefox 16+, Chrome 34+, Opera21*+ Num ber.isInteger(value) // true console.log(Num ber.isInteger(19)); // false console.log(Num ber.isInteger(3.5)); // false console.log(Num ber.isInteger([1, 2, 3]));
  • 43. Ecmascript 6 : Number Number.isNaN(): Firefox 16+, Chrome 19+, Opera17*+ window.isNaN() ya existía. Pero... console.log(w indow .isN aN (0/0)); console.log(w indow .isN aN ('test')); console.log(w indow .isN aN (undefined)); console.log(w indow .isN aN ({prop: 'value'})); // true // true // true // true
  • 44. Ecmascript 6 : Number Number.isNaN(): Firefox 16+, Chrome 19+, Opera17*+ Number.isNaN() se comporta de forma diferente. console.log(Num ber.isN aN (0/0)); console.log(Num ber.isN aN (N aN )); console.log(Num ber.isN aN (undefined)); console.log(Num ber.isN aN ({prop: 'value'})); // true // true // false // false
  • 45. Ecmascript 6 : Number Number.isFinite(): Firefox 16+, Chrome 19+, Opera17*+ window.isFinite() también existía. console.log(w indow .isFinite(10)); console.log(w indow .isFinite(Num ber.M AX_VALUE)); console.log(w indow .isFinite(null)); console.log(w indow .isFinite([])); // true // true // true // true
  • 46. Ecmascript 6 : Number Number.isFinite(): Firefox 16+, Chrome 19+, Opera17*+ Num ber.isFinite(value) se comporta de forma diferente. console.log(Num ber.isFinite(10)); console.log(Num ber.isFinite(Num ber.M AX_VALUE)); console.log(Num ber.isFinite(null)); console.log(Num ber.isFinite([])); // true // true // false // false
  • 47. Ecmascript 6 : Number Number.isSafeInteger(): Firefox 16+, Chrome 19+, Opera17*+ ● Safe integers: Aquellos enteros desde el -(2 - 1) inclusive hasta el 2 - 1 ● Num ber.isSafeInteger(value) console.log(Num ber.isSafeInteger(5)); // im prim e "true" console.log(Num ber.isSafeInteger('19')); // im prim e "false" console.log(Num ber.isSafeInteger(M ath.pow (2, 53))); // im prim e "false" console.log(Num ber.isSafeInteger(M ath.pow (2, 53) - 1)); // im prim e "true" 53 53
  • 48. Ecmascript 6 : Number Number.parseInt(), Number.parseFloat: Firefox 16+, Chrome 19+, Opera17*+ Num ber.parseInt(valor [, base]) // im prim e "-3" console.log(Num ber.parseInt('-3')); // im prim e "4" console.log(Num ber.parseInt('100', 2)); // im prim e "N aN" console.log(Num ber.parseInt('test')); // im prim e "N aN" console.log(Num ber.parseInt({})); Num ber.parseFloat(valor) // im prim e "42.1" console.log(N um ber.parseFloat('42.1')); // im prim e "NaN" console.log(N um ber.parseFloat('test')); // im prim e "NaN" console.log(N um ber.parseFloat({}));
  • 49. MAP PROTOTYPE MAP PROTOTYPE 8
  • 50. Map Map: Firefox, Chrome* , Opera* var array = [['key1', 'value1'], ['key2', 100]]; var m ap = new M ap(array); console.log(m ap.get('key1')); //‘value1’ m ap.set({'a' : 'b'}, 'tres'); console.log(m ap.get({'a' : 'b'})); //undefined; var array2 = ['lentejas', 'lim on']; m ap.set(array2, 'exquisito'); console.log(m ap.get(array2)); //exquisito; console.log(m ap.size); //4; for(let x of m ap){ console.log(x); } for(let x of m ap.values()){ console.log(x); } m ap.forEach(function(value, key, m ap){ console.log(value); }); m ap.delete(array2); //true; m ap.has('no estoy'); //false;
  • 51. CLASS, SUBCLASS CLASS SUBCLASS 9
  • 52. Class, subclass Class, class extends // Superclass class Person { constructor(nam e) { this.nam e = nam e; } describe() { return "Person called " + this.nam e; } } // Subclass class Em ployee extends Person { constructor(nam e, title) { super.constructor(nam e); this.title = title; } describe() { return super.describe() + " (" + this.title + ")"; } }
  • 53. Class, subclass Uso de Class let jane = new Em ployee("Jane", "CTO "); jane instanceof Person; //true jane instanceof Em ployee //true jane.describe() //Person called Jane (CTO )
  • 54. ES6 PROXY ES6 PROXY 10
  • 55. EC6 PROXY var designer= { nam e:'M ontalvo', salary: 50 }; var interceptor = { set: function (receiver, property, value) { console.log(property, 'is changed to', value); receiver[property] = value; } }; designer = new Proxy(designer, interceptor); designer .salary = 60; //salary is changed to 60 Operation Intercepted as proxy[name] handler.get(proxy, name) proxy[name] = val handler.set(proxy, name, val) name in proxy handler.has(name) delete proxy[name] handler.delete(name) for (var name in proxy) {...} handler.iterate() Object.keys(proxy) handler.keys()
  • 56. Recursos y fuentes Recursos: http://addyosmani.com/blog/ecmascript-6-resources-for-the-curious-javascripter/ Fuentes: https://developer.mozilla.org http://www.sitepoint.com/ https://github.com/lukehoban/es6features http://ariya.ofilabs.com/ http://www.2ality.com/ http://addyosmani.com/ https://leanpub.com/
  • 57. Esto es todo MUCHAS GRACIAS :)
  • 58. Contacto: @LuisCalvoDíaz lcalvo@paradigmatecnologico.com @NachoNavaReus inavarro@stratio.com