SlideShare a Scribd company logo
1 of 25
UNA TAPA DE ECMASCRIPT 6 
EL JAVASCRIPT QUE VIENE... ;-) 
EDUARD TOMÀS - PASIONA 
@EIXIMENIS 
HTTP://GEEKS.MS/BLOGS/ETOMAS 
HTTP://WWW.PASIONA.COM
UN POCO DE HISTORIA 
• Inventado por Brendan Eich para Netscape 
• Inicialmente basado en Scheme (dialecto de lisp) 
• Migró a una sintaxis “tipo C” y se llamó LiveScript 
• Renombrado a JavaScript después del acuerdo con Sun 
(1995)
UN POCO DE HISTORIA 
• Microsoft lo “copia” y lanza Jscript 
• Otros navegadors lo “copian” y mantienen el nombre 
JavaScript 
• El 1997 es estandarizado como ECMAScript
ECMASCRIPT 
• 1: Primera versión (1997) 
• 2: Retoques para adaptarse a la ISO (1998) 
• 3: Primera revisión (expresiones regulares, try/catch,...) (1999) 
• 4: Versión abandonada 
• 5: Segunda revisión (strict mode, get/set, ....) (2009) 
• 5.1: Retoques para adaptarse a la ISO (2011) 
• 6 (Harmony): WIP 
• 7: WIP
ECMASCRIPT 6 
• JavaScript es un lenguaje de espíritu funcional atrapado en un 
cuerpo procedural 
• ES6 hace especial enfásis en las capacidades funcionales del 
lenguaje 
• Implementación en los navegadores: En progreso - 
http://kangax.github.io/compat-table/es6/
1 - SCOPES LOCALES Y CONSTANTES 
• Definir una variable con let en lugar de var la define en el 
scope local 
• Definir una variable con const define una constante 
• let no aplica hoisting
2 - DESTRUCTURING 
• Array patern 
• let [a, b, c] = [10, 20, “30”]; 
• Válido en retornos de funciones 
• Object pattern 
• let {a: pa, b: pb} = {a: 10, b:30};
3 - PARÁMETROS X DEFECTO & REST (AKA VARIADIC) 
• No más tests de undefined 
• function foo(a, b=10) 
• function variadic(a,b,...v)
4 - OPERADOR SPREAD 
• Convierte un objeto/array en n parámetros 
• Extremadamente potente combinado con apply 
• x.f(...a) === f.apply(x, a);
5 - OPERADOR ARROW (AKA LAMBDA FUNCTIONS) 
• Simplifica la definición de funciones inline 
(a) => a*a equivale a 
(function(a) { return a*a;}).bind(this);
6 - SHORTHAND OBJECT LITERAL 
• Al crear un objeto se puede omitir el nombre de la 
propiedad si esta coincide con el de la variable a partir de 
la cual se crea. 
• ES5 {url: url, method: ‘POST’} 
• ES6: {url, method:’POST’}
7 – ITERADORES, ITERABLES 
• Iterador: Objecto con método next() que devuelve tuplas 
{done, value} (bool, tipo) 
• Iterable: Objeto que contiene el método iterator() que 
devuelve un iterador
8 – FOR..OF 
• Nuevo bucle para iterar sobre iterables. 
• Itera una vez sobre cada uno de los valores del iterador 
devuelto por el iterable.
9 – GENERATORS (CORUTINAS) 
• function* para crear un generador 
• Usar yield para devolver un valor y permitir la reentrada 
• Un generador es un iterador y es un iterable 
• Un generador se lee una sola vez (luego el iterador ya ha 
sido consumido)
10 – MAPS & SETS 
• Diccionarios clave, valor. 
• Los objetos de JS se comportan como mapas salvo que las 
claves son convertidas a cadenas. En los Maps eso no ocurre 
• Son iterables (for..of) 
• Maps: Diccionarios clave, valor. Método has va por clave. 
• Sets: Conjunto de valores. Método has va por valor.
11 - CLASES 
• ES6 ofrece clases pero eso no convierte al lenguaje en 
estático 
• Las clases de ES6 son syntax sugar sobre los prototipos 
• Se definen con class y se insancian con new
11 - CLASES
11 – CLASES (II) 
• Herencia entre clases con extends 
• Se pueden redefinir métodos de clase base (simplemente 
redeclarándolos). 
• Se puede usar super() para llamar a la implementación de la 
clase base.
12 - PROXIES 
• Permite modificar la semántica de un objeto existente de 
forma “transparente”. 
• Permiten escenarios de AOP.
13 - PROMISES 
• Una promise es un objeto que representa una tarea a ser 
realizada en un futuro. 
• Muy usadas en JavaScript, pero no eran nativas. Cada 
librería usaba su propia implementación 
• ES6 las incorpora de série, basándose en el estàndard A+
14 - MÓDULOS 
• Actualmente dos sistemas de módulos no natives tienen 
preferència 
• AMD 
• Asíncrono, Navegador, No soporta referencias circulares 
• CommonJS 
• Síncrono, Servidor (Aka Node), Soporta referencias circulares
14 - MÓDULOS 
• ES6 incorpora de forma nativa un sistema de módulos 
• Síncrono / asíncrono 
• Sintaxis todavía más compacta que la de CommonJS
14 - MÓDULOS 
• Definición
14 - MÓDULOS 
• Uso: Los exports del módulo se important en un objeto local 
• Uso: import * importa todos los exports del módulo en un 
espacio de nombres
14 - MÓDULOS 
• Un módulo puede exportar por defecto un solo elemento 
(muy común tanto en nodejs como en frontend)

More Related Content

Similar to Una tapa de ecmascript 6

Similar to Una tapa de ecmascript 6 (20)

Java 1.8:Road to Functional Language
Java 1.8:Road to Functional LanguageJava 1.8:Road to Functional Language
Java 1.8:Road to Functional Language
 
Javascript
JavascriptJavascript
Javascript
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Software Clips
Software ClipsSoftware Clips
Software Clips
 
Lenguajes Dinámicos en la Java Virtual Machine
Lenguajes Dinámicos en la Java Virtual MachineLenguajes Dinámicos en la Java Virtual Machine
Lenguajes Dinámicos en la Java Virtual Machine
 
40 Novedades de JavaSE 9
40 Novedades de JavaSE 940 Novedades de JavaSE 9
40 Novedades de JavaSE 9
 
Dynamic jvm
Dynamic jvmDynamic jvm
Dynamic jvm
 
Introducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a ObjetosIntroducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Eclipse refactoring
Eclipse refactoringEclipse refactoring
Eclipse refactoring
 
Ios.s2
Ios.s2Ios.s2
Ios.s2
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Introducción a Ceylon
Introducción a CeylonIntroducción a Ceylon
Introducción a Ceylon
 
Tema1
Tema1Tema1
Tema1
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Java
JavaJava
Java
 
04 j flex
04 j flex04 j flex
04 j flex
 
7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML
 

More from Eduard Tomàs

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sEduard Tomàs
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAEduard Tomàs
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEduard Tomàs
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nuncaEduard Tomàs
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDAEduard Tomàs
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessEduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard Tomàs
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Eduard Tomàs
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundoEduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aksEduard Tomàs
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Eduard Tomàs
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosEduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbEduard Tomàs
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menosEduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?Eduard Tomàs
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your deviceEduard Tomàs
 

More from Eduard Tomàs (20)

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Azure functions
Azure functionsAzure functions
Azure functions
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
 

Una tapa de ecmascript 6

  • 1. UNA TAPA DE ECMASCRIPT 6 EL JAVASCRIPT QUE VIENE... ;-) EDUARD TOMÀS - PASIONA @EIXIMENIS HTTP://GEEKS.MS/BLOGS/ETOMAS HTTP://WWW.PASIONA.COM
  • 2. UN POCO DE HISTORIA • Inventado por Brendan Eich para Netscape • Inicialmente basado en Scheme (dialecto de lisp) • Migró a una sintaxis “tipo C” y se llamó LiveScript • Renombrado a JavaScript después del acuerdo con Sun (1995)
  • 3. UN POCO DE HISTORIA • Microsoft lo “copia” y lanza Jscript • Otros navegadors lo “copian” y mantienen el nombre JavaScript • El 1997 es estandarizado como ECMAScript
  • 4. ECMASCRIPT • 1: Primera versión (1997) • 2: Retoques para adaptarse a la ISO (1998) • 3: Primera revisión (expresiones regulares, try/catch,...) (1999) • 4: Versión abandonada • 5: Segunda revisión (strict mode, get/set, ....) (2009) • 5.1: Retoques para adaptarse a la ISO (2011) • 6 (Harmony): WIP • 7: WIP
  • 5. ECMASCRIPT 6 • JavaScript es un lenguaje de espíritu funcional atrapado en un cuerpo procedural • ES6 hace especial enfásis en las capacidades funcionales del lenguaje • Implementación en los navegadores: En progreso - http://kangax.github.io/compat-table/es6/
  • 6. 1 - SCOPES LOCALES Y CONSTANTES • Definir una variable con let en lugar de var la define en el scope local • Definir una variable con const define una constante • let no aplica hoisting
  • 7. 2 - DESTRUCTURING • Array patern • let [a, b, c] = [10, 20, “30”]; • Válido en retornos de funciones • Object pattern • let {a: pa, b: pb} = {a: 10, b:30};
  • 8. 3 - PARÁMETROS X DEFECTO & REST (AKA VARIADIC) • No más tests de undefined • function foo(a, b=10) • function variadic(a,b,...v)
  • 9. 4 - OPERADOR SPREAD • Convierte un objeto/array en n parámetros • Extremadamente potente combinado con apply • x.f(...a) === f.apply(x, a);
  • 10. 5 - OPERADOR ARROW (AKA LAMBDA FUNCTIONS) • Simplifica la definición de funciones inline (a) => a*a equivale a (function(a) { return a*a;}).bind(this);
  • 11. 6 - SHORTHAND OBJECT LITERAL • Al crear un objeto se puede omitir el nombre de la propiedad si esta coincide con el de la variable a partir de la cual se crea. • ES5 {url: url, method: ‘POST’} • ES6: {url, method:’POST’}
  • 12. 7 – ITERADORES, ITERABLES • Iterador: Objecto con método next() que devuelve tuplas {done, value} (bool, tipo) • Iterable: Objeto que contiene el método iterator() que devuelve un iterador
  • 13. 8 – FOR..OF • Nuevo bucle para iterar sobre iterables. • Itera una vez sobre cada uno de los valores del iterador devuelto por el iterable.
  • 14. 9 – GENERATORS (CORUTINAS) • function* para crear un generador • Usar yield para devolver un valor y permitir la reentrada • Un generador es un iterador y es un iterable • Un generador se lee una sola vez (luego el iterador ya ha sido consumido)
  • 15. 10 – MAPS & SETS • Diccionarios clave, valor. • Los objetos de JS se comportan como mapas salvo que las claves son convertidas a cadenas. En los Maps eso no ocurre • Son iterables (for..of) • Maps: Diccionarios clave, valor. Método has va por clave. • Sets: Conjunto de valores. Método has va por valor.
  • 16. 11 - CLASES • ES6 ofrece clases pero eso no convierte al lenguaje en estático • Las clases de ES6 son syntax sugar sobre los prototipos • Se definen con class y se insancian con new
  • 18. 11 – CLASES (II) • Herencia entre clases con extends • Se pueden redefinir métodos de clase base (simplemente redeclarándolos). • Se puede usar super() para llamar a la implementación de la clase base.
  • 19. 12 - PROXIES • Permite modificar la semántica de un objeto existente de forma “transparente”. • Permiten escenarios de AOP.
  • 20. 13 - PROMISES • Una promise es un objeto que representa una tarea a ser realizada en un futuro. • Muy usadas en JavaScript, pero no eran nativas. Cada librería usaba su propia implementación • ES6 las incorpora de série, basándose en el estàndard A+
  • 21. 14 - MÓDULOS • Actualmente dos sistemas de módulos no natives tienen preferència • AMD • Asíncrono, Navegador, No soporta referencias circulares • CommonJS • Síncrono, Servidor (Aka Node), Soporta referencias circulares
  • 22. 14 - MÓDULOS • ES6 incorpora de forma nativa un sistema de módulos • Síncrono / asíncrono • Sintaxis todavía más compacta que la de CommonJS
  • 23. 14 - MÓDULOS • Definición
  • 24. 14 - MÓDULOS • Uso: Los exports del módulo se important en un objeto local • Uso: import * importa todos los exports del módulo en un espacio de nombres
  • 25. 14 - MÓDULOS • Un módulo puede exportar por defecto un solo elemento (muy común tanto en nodejs como en frontend)