SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Dart como alternativa a Typescript
@rafbermudez
Hoja de personaje
Rafael Bermúdez Míguez
Gallego
Caótico soñador infinitemonkeys
@inf_monkeys
I coding
● @rafbermudez
● rafa@rafbermudez.com
● Google (2011)
○ v1.0 en 2014
○ Open source: BSD
● Propósito general
○ Orientado a objetos
○ Orientado a tipado dinámico
○ Transcompila a Javascript
■ ES5
Contexto
● Microsoft (2012)
○ v1.0 en 2014 (actualmente v2.0)
○ Open source: Apache 2.0
● Superset de Javascript
○ Orientado a objetos
○ Orientado a tipado estático
○ Transcompila a Javascript
■ ES5*, ES6, …
Funciones y Scope
Round 1
// Named function
function add(x, y) {
return x + y;
}
// Named function
add(x, y) {
return x + y;
}
Funciones
// Anonymous arrow function EC6
let myAdd = (x, y) => x+y;
// Anonymous function
let myAdd = function(x, y) { return x+y; };
// First class functions
let useFunc = (x, f) => f(x);
let result = useFunc (2, (a) => a * a); //4
// Anonymous function
var myAdd = (x, y) => x+y;
// First class functions
var useFunc = (x, f) => f(x);
var result = useFunc (2, (a) => a * a); //4
// Default params
function add(x, y = 2) {
return x + y;
}
// Default params
add(x, y: 2 ) {
return x + y;
}
Params. por defecto | opcionales
// Optional params
function add(x, y, z?){
let result = x + y;
if (z) { result +=z; }
return result;
}
// Optional params
add(x, y, [z]) {
var result = x+y;
if (z !=null) { result +=z;}
return result;
}
function add(x, y, z?) {
var result = x + y;
if (z) { var result = x + y + z; }
return result;
}
let a = add(1,1,1) // 3
add(x, y, [z]) {
var result = x+y;
if (z !=null) { var result = x + y + z;}
return result;
}
var a = add(1,1,1) // 2
Ámbito de las variables
function add(x, y, z?) {
let result = x + y;
if (z) { let result = x + y + z; }
return result;
}
let a = add(1,1,1) // 2
this en Typescript
Troleo Quiz 1
growOld();
alert(person.age);
¿?
growOld2();
alert(person.age);
¿?
Troleo Quiz 1
function Person(age) {
this.age = age
this.growOld = function (years) {this.age ++;}
this.growOld2 = (years) => {this.age ++;}
}
var person = new Person(1);
var growOld = person.growOld;
var growOld2 = person.growOld2;
2
1
¿Por qué?
Typescript respeta el function scope de Javascript
*Las funciones de flecha capturan la función donde se crea en lugar de donde
se invoca.
Troleo Quiz 1
Tipos
Round 2
// Named function
function add(x: number, y: number): number {
return x + y;
}
// Named function
num add(num x, num y) {
return x + y;
}
Tipos
// Anonymous arrow function EC6
let myAdd = (x:number, y:number):number => x+y;
// Anonymous function
let myAdd = (baseValue: number, increment: number) => number =
function(x: number, y: number): number {
return x + y;
};
/ Anonymous function
num myAdd = ( num x, num y) => x+y;
let a = 3; //inference, x:number var a = 3; //Optional types, dynamic, not inference
Tipos: Inferencia
// Anonymous arrow function EC6
let myAdd = (x:number, y:number):number => x+y;
//inference, myAdd: (number, number) => number
// Anonymous function
num myAdd = ( num x, num y) => x+y;
// Anonymous function
int myAdd = ( int x, int y) => x+y;
int myAdd = ( num x, num y) => x+y; //Implicit cast
// Anonymous arrow function EC6
let myAdd = (x:number, y:number):number => x+y;
// Named function
function add(x: number, y: number): number {
return x + y;
}
// Named function
int add(int x, int y) {
return x + y;
}
Tipos Básicos
number: double-precision 64-bit (IEEE) int <: num
Tipos en TypeScript
Troleo Quiz 2
var parrot: Parrot = new Sparrow();
¿?
var sparrow: Sparrow = new Parrot();
¿?
Troleo Quiz 2
class Sparrow {
sound = "cheep";
}
class Parrot {
sound = "squawk";
}
class Duck {
sound = "quack";
swim(){
alert("Going for a dip!");
}
}
Sustituíble
Sustituíble
var parrot2: Parrot= new Duck();
¿?
var duck: Duck = new Parrot();
¿?
Troleo Quiz 2
class Sparrow {
sound = "cheep";
}
class Parrot {
sound = "squawk";
}
class Duck {
sound = "quack";
swim(){
alert("Going for a dip!");
}
}
Sustituíble
IDE & compiler error
¿Por qué?
Duck Typing:
El conjunto de métodos y propiedades determina la semántica
Troleo Quiz 2
Dart utiliza Duck Typing dinámico
( en tiempo de ejecución)
o
Dart utiliza Duck Typing estático
(en tiempo de compilación)
activando el checked mode
Troleo Quiz 2
TypeScript utiliza Duck Typing estático
( en tiempo de compilación)
Hace posible la implementación ágil de
interfaces, el uso de union types, …
Orientación a Objetos
Round 3
class Animal {
name: string;
constructor(name: string) { this.name = name; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Animal {
String name;
Animal( String name ) {this.name = name; }
move( num distanceInMeters = 0){
print(“${this.name} moved ${distanceInMeters}m.”);
}
}
Clases
interface Criature {
name: string;
weight?: number; //Optional
}
class Criature {
String name = “bicho”;
num weight;
}
Interfaces y Clases abstractas
abstract class Animal implements Criature {
name = “bicho”
constructor(name: string) { this.name = name; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
abstract class Animal implements Criature {
String name = “Animal”;
num weight; //Required
Animal( String name ) {this.name = name; }
move( num distanceInMeters = 0){
print(“${this.name} moved ${distanceInMeters}m.”);
}
}
class Animal {
name: string;
constructor(name: string) { this.name = name; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
class Animal {
String name;
Animal( String name ) {this.name = name; }
move( num distanceInMeters = 0){
print(“${this.name} moved ${distanceInMeters}m.”);
}
}
class Snake extends Animal {
Snake(String name): super(name);
move(distanceInMeters = 5) {
print("Slithering...");
super.move(distanceInMeters);
}
}
Herencia y polimorfismo
Polimorfismo en TypeScript
Troleo Quiz 3
var f = new Foo();
f.myMethod(1);
¿?
Troleo Quiz 3
class Foo {
myMethod(a: number){
alert(a.toString());
}
myMethod(a: string) {
alert(a);
}
}
var f = new Foo();
f.myMethod(1);
IDE & compiler error
¿Por qué?
Duplicate method implementation
Una única implementación por función. Evítalo utilizando Type union
Troleo Quiz 3
Módulos, Colecciones y soporte asíncrono
Round 4
// models/Dog.ts
class Dog {
name:string;
constructor(name:string) {this.name = name;}
makeSound() {
return "guau";
}
}
export = Dog;
// models/Dog.dart
class Dog {
String name;
Dog(String name) {this.name = name;}
makeSound() {
return "guau";
}
}
Módulos
___________________________
// main.ts
import Dog = require('models/Dog');
var dog = new Dog(“Pancho”);
console.log(dog.makeSound());
____________________________
// main.dart
import 'models/Dog.dart' show Dog;
var dog = new Dog(“Pancho”);
print(dog.makeSound());
// Arrays
let numberList: number[] = [1, 2, 3];
let numberList: Array<number> = [1, 2, 3];
// Enums
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
// Tuples
let x: [string, number];
x = ["hello", 10]; // OK
x = [10, "hello"]; // Error
// Sin soporte nativo para Maps, Sets, ...
// ES6 MapCollections
// Lists
List numberList = [1, 2, 3];
List<string, num> x = ["hello", 10]; //Tuple
//Enums
enum Color {Red, Green, Blue};
Color c = Color.Green
//Maps
var accounts = {'bob@example.com': new Account(/* … */),
'john@example.com': new Account(/* … */)};
//Set, Queue, …
//Soporte a muchas más colecciones (e
implementaciones) a través del paquete collections
Colecciones
● Nativamente
○ Futuros
■ Async/await
■ Future API
○ Streams
■ Asynchronous for loop
■ Stream API
● A través de ES6
○ Async/await
○ Promesas
● Librerías de terceros
○ Streams
Soporte asíncrono
async function doPing() {
await ping();
}
async function ping() {
for (var i = 0; i < 10; i++) {
await delay(300);
console.log(“ping”);
}
}
function delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
doPing();
doPing() async {
await ping();
}
ping() async {
for (var i = 0; i < 10; i++) {
await delay(300);
print(“ping”);
}
}
Future delay(num ms) {
return new Future.delayed(ms));
}
doPing();
Async/await, promesas y
futuros
Arquitectura de proyecto en TypeScript
Troleo Quiz 4
¿Angular2 está pensado para TypeScript?
¿?
Troleo Quiz 4
¿Typescript es todo lo que necesito?
¿?
NPM
SystemJs
Jasmine
Js minification
Gulp
...
Sí, pero Angular 2 nace de
AngularDart!
Ecosistema
Round 5
● Librerías propias
○ Existen 3200
● JS interop (bidireccional)
@JS("addLibrary");
external String add(obj);
print(add(1,2));
● Frameworks
○ Angular2 (nace de Dart)
○ Polymer
○ React
○ ...
● Librerías propias
● JS interop (bidireccional)
import add = require('addLibrary');
console.log(add(1, 2));
● Frameworks
○ Angular2
○ Polymer
○ React
○ ...
Librerías y frameworks
● Online compiler
○ https://dartpad.dartlang.org/
● Requisitos
○ WebApp -> Chromium, Dart2js
○ Script or server -> Dartium
○ Mobile -> Flutter
● IDE’s
○ WebStorm
○ Sublime Text
○ Atom
○ WebStorm
○ Emacs/Vim
● Online compiler
○ http://www.typescriptlang.org/play/
● Requisitos
○ WebApp -> Transpiler
○ Script or server -> NodeJS
○ Mobile -> Ionic + Angular, …
● IDE’s
○ Visual Studio Code
○ Visual Studio > 2013
○ Sublime Text
○ Atom
○ Eclipse
○ WebStorm
○ Emacs/Vim
Tools
Nadie usa Dart.
Sin comunidad. ¡Es suicidio profesional!
Troleo Quiz 5
¿Comunidad en stack overflow?
¿?
¿El equipo de Google Dart me da soporte directo
por slack?
¿?
Troleo Quiz 5
¿Aplicaciones reales (y grandes) con Dart?
¿?AdWords y Greentea
15.362 hilos
Tiempo medio de
respuesta = ¡¡ 6 min !!
Pero recordad...
Troleo Quiz 5
Troleo Quiz 5
¡Es un suicidio profesional!
¡Gracias! ¿Preguntas?
Dart como alternativa a Typescript
@rafbermudez

Contenu connexe

Tendances

Ejercicios resueltos practica 2 (nueva 2014) informática ii
Ejercicios resueltos practica 2 (nueva 2014) informática iiEjercicios resueltos practica 2 (nueva 2014) informática ii
Ejercicios resueltos practica 2 (nueva 2014) informática iiAlvin Jacobs
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bFRESH221 C.R
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swiftbetabeers
 
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 JavaScriptRicardo Pallás Román
 
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasTap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasJosé Antonio Sandoval Acosta
 
Curso iOS
Curso iOSCurso iOS
Curso iOSPlatzi
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduinojesusresta
 
Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM DoctrineDecharlas
 

Tendances (20)

Ejercicios resueltos practica 2 (nueva 2014) informática ii
Ejercicios resueltos practica 2 (nueva 2014) informática iiEjercicios resueltos practica 2 (nueva 2014) informática ii
Ejercicios resueltos practica 2 (nueva 2014) informática ii
 
Informe tecnico
Informe tecnicoInforme tecnico
Informe tecnico
 
Pensando funcionalmente
Pensando funcionalmentePensando funcionalmente
Pensando funcionalmente
 
Hechos en clase
Hechos en claseHechos en clase
Hechos en clase
 
Jorge informe tecnico
Jorge informe tecnicoJorge informe tecnico
Jorge informe tecnico
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Ajax
AjaxAjax
Ajax
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Practica de programacion 21 28
Practica de programacion 21 28Practica de programacion 21 28
Practica de programacion 21 28
 
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
 
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasTap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
 
Curso iOS
Curso iOSCurso iOS
Curso iOS
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduino
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
Ejemplo de aplicación cliente-servidor en C#
Ejemplo de aplicación cliente-servidor  en C#Ejemplo de aplicación cliente-servidor  en C#
Ejemplo de aplicación cliente-servidor en C#
 
Arreglos en C++
Arreglos en C++Arreglos en C++
Arreglos en C++
 
Javascript
JavascriptJavascript
Javascript
 
Curso android studio
Curso android studioCurso android studio
Curso android studio
 

En vedette

Pearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed PresentationPearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed PresentationGeneralAssembly_DC
 
Learn DC Assembled Education Presentation
Learn DC Assembled Education PresentationLearn DC Assembled Education Presentation
Learn DC Assembled Education PresentationGeneralAssembly_DC
 
Education B2B @CESAR
Education B2B @CESAREducation B2B @CESAR
Education B2B @CESARCESAR
 
Evaluation- Question 3
Evaluation- Question 3Evaluation- Question 3
Evaluation- Question 3Tillypeasnell
 
Garage door springs
Garage door springsGarage door springs
Garage door springsdonve33
 
Baocaocuoiki
BaocaocuoikiBaocaocuoiki
Baocaocuoikihogphuc92
 
показательная и логарифмическая функции
показательная и логарифмическая функциипоказательная и логарифмическая функции
показательная и логарифмическая функцииkos9ik
 
PeaceIIILimavadyJune 2013
PeaceIIILimavadyJune 2013PeaceIIILimavadyJune 2013
PeaceIIILimavadyJune 2013Sinéad Lynch
 
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드iamnanda301
 
Recap of 2014 meeting and this meeting’s Objectives
Recap of 2014 meeting and this meeting’s ObjectivesRecap of 2014 meeting and this meeting’s Objectives
Recap of 2014 meeting and this meeting’s ObjectivesEthical Sector
 
Monitor i2757Fh / i2757Fm
Monitor i2757Fh / i2757FmMonitor i2757Fh / i2757Fm
Monitor i2757Fh / i2757FmAOC vision
 
Monitor LED AOC - e2371F
Monitor LED AOC - e2371FMonitor LED AOC - e2371F
Monitor LED AOC - e2371FAOC vision
 
Creative Toolbox Photography
Creative Toolbox PhotographyCreative Toolbox Photography
Creative Toolbox PhotographyCreativeToolbox
 

En vedette (20)

Pearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed PresentationPearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed Presentation
 
Boxnews.com.ua 2016
Boxnews.com.ua 2016Boxnews.com.ua 2016
Boxnews.com.ua 2016
 
ин ян
ин янин ян
ин ян
 
Toothbrush
ToothbrushToothbrush
Toothbrush
 
Learn DC Assembled Education Presentation
Learn DC Assembled Education PresentationLearn DC Assembled Education Presentation
Learn DC Assembled Education Presentation
 
Education B2B @CESAR
Education B2B @CESAREducation B2B @CESAR
Education B2B @CESAR
 
Evaluation- Question 3
Evaluation- Question 3Evaluation- Question 3
Evaluation- Question 3
 
What is skeena2050
What is skeena2050What is skeena2050
What is skeena2050
 
Garage door springs
Garage door springsGarage door springs
Garage door springs
 
Китай.China
Китай.ChinaКитай.China
Китай.China
 
Baocaocuoiki
BaocaocuoikiBaocaocuoiki
Baocaocuoiki
 
показательная и логарифмическая функции
показательная и логарифмическая функциипоказательная и логарифмическая функции
показательная и логарифмическая функции
 
Lecture01
Lecture01Lecture01
Lecture01
 
PeaceIIILimavadyJune 2013
PeaceIIILimavadyJune 2013PeaceIIILimavadyJune 2013
PeaceIIILimavadyJune 2013
 
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
 
Recap of 2014 meeting and this meeting’s Objectives
Recap of 2014 meeting and this meeting’s ObjectivesRecap of 2014 meeting and this meeting’s Objectives
Recap of 2014 meeting and this meeting’s Objectives
 
Thay Peraza
Thay PerazaThay Peraza
Thay Peraza
 
Monitor i2757Fh / i2757Fm
Monitor i2757Fh / i2757FmMonitor i2757Fh / i2757Fm
Monitor i2757Fh / i2757Fm
 
Monitor LED AOC - e2371F
Monitor LED AOC - e2371FMonitor LED AOC - e2371F
Monitor LED AOC - e2371F
 
Creative Toolbox Photography
Creative Toolbox PhotographyCreative Toolbox Photography
Creative Toolbox Photography
 

Similaire à Dart como alternativa a TypeScript (Codemotion 2016)

Similaire à Dart como alternativa a TypeScript (Codemotion 2016) (20)

Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
 
Los lenguajes de la web
Los lenguajes de la webLos lenguajes de la web
Los lenguajes de la web
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Lo que las empresas piden
Lo que las empresas pidenLo que las empresas piden
Lo que las empresas piden
 
Programacion ii
Programacion iiProgramacion ii
Programacion ii
 
P1
P1P1
P1
 
Informe minishell
Informe minishellInforme minishell
Informe minishell
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
 
Cpp
CppCpp
Cpp
 
Cpp
CppCpp
Cpp
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en C
 

Plus de Rafael Bermúdez Míguez

Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)Rafael Bermúdez Míguez
 
Desafío total: cómo resolver retos extremos
Desafío total:  cómo resolver retos extremosDesafío total:  cómo resolver retos extremos
Desafío total: cómo resolver retos extremosRafael Bermúdez Míguez
 
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Construyendo tu propia bola de cristal  predicción de precios con machine lea...Construyendo tu propia bola de cristal  predicción de precios con machine lea...
Construyendo tu propia bola de cristal predicción de precios con machine lea...Rafael Bermúdez Míguez
 
Cross management experiences. mis 7 conclusiones
Cross management experiences.  mis 7 conclusionesCross management experiences.  mis 7 conclusiones
Cross management experiences. mis 7 conclusionesRafael Bermúdez Míguez
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresRafael Bermúdez Míguez
 
Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Rafael Bermúdez Míguez
 
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...Rafael Bermúdez Míguez
 

Plus de Rafael Bermúdez Míguez (9)

Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
 
Desafío total: cómo resolver retos extremos
Desafío total:  cómo resolver retos extremosDesafío total:  cómo resolver retos extremos
Desafío total: cómo resolver retos extremos
 
Gorm for cassandra
Gorm for cassandraGorm for cassandra
Gorm for cassandra
 
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Construyendo tu propia bola de cristal  predicción de precios con machine lea...Construyendo tu propia bola de cristal  predicción de precios con machine lea...
Construyendo tu propia bola de cristal predicción de precios con machine lea...
 
Cross management experiences. mis 7 conclusiones
Cross management experiences.  mis 7 conclusionesCross management experiences.  mis 7 conclusiones
Cross management experiences. mis 7 conclusiones
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadores
 
Acercádonos a dart
Acercádonos a dartAcercádonos a dart
Acercádonos a dart
 
Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)
 
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
 

Dernier

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 

Dernier (11)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 

Dart como alternativa a TypeScript (Codemotion 2016)

  • 1. Dart como alternativa a Typescript @rafbermudez
  • 2. Hoja de personaje Rafael Bermúdez Míguez Gallego Caótico soñador infinitemonkeys @inf_monkeys I coding ● @rafbermudez ● rafa@rafbermudez.com
  • 3. ● Google (2011) ○ v1.0 en 2014 ○ Open source: BSD ● Propósito general ○ Orientado a objetos ○ Orientado a tipado dinámico ○ Transcompila a Javascript ■ ES5 Contexto ● Microsoft (2012) ○ v1.0 en 2014 (actualmente v2.0) ○ Open source: Apache 2.0 ● Superset de Javascript ○ Orientado a objetos ○ Orientado a tipado estático ○ Transcompila a Javascript ■ ES5*, ES6, …
  • 5. // Named function function add(x, y) { return x + y; } // Named function add(x, y) { return x + y; } Funciones // Anonymous arrow function EC6 let myAdd = (x, y) => x+y; // Anonymous function let myAdd = function(x, y) { return x+y; }; // First class functions let useFunc = (x, f) => f(x); let result = useFunc (2, (a) => a * a); //4 // Anonymous function var myAdd = (x, y) => x+y; // First class functions var useFunc = (x, f) => f(x); var result = useFunc (2, (a) => a * a); //4
  • 6. // Default params function add(x, y = 2) { return x + y; } // Default params add(x, y: 2 ) { return x + y; } Params. por defecto | opcionales // Optional params function add(x, y, z?){ let result = x + y; if (z) { result +=z; } return result; } // Optional params add(x, y, [z]) { var result = x+y; if (z !=null) { result +=z;} return result; }
  • 7. function add(x, y, z?) { var result = x + y; if (z) { var result = x + y + z; } return result; } let a = add(1,1,1) // 3 add(x, y, [z]) { var result = x+y; if (z !=null) { var result = x + y + z;} return result; } var a = add(1,1,1) // 2 Ámbito de las variables function add(x, y, z?) { let result = x + y; if (z) { let result = x + y + z; } return result; } let a = add(1,1,1) // 2
  • 9. growOld(); alert(person.age); ¿? growOld2(); alert(person.age); ¿? Troleo Quiz 1 function Person(age) { this.age = age this.growOld = function (years) {this.age ++;} this.growOld2 = (years) => {this.age ++;} } var person = new Person(1); var growOld = person.growOld; var growOld2 = person.growOld2; 2 1
  • 10. ¿Por qué? Typescript respeta el function scope de Javascript *Las funciones de flecha capturan la función donde se crea en lugar de donde se invoca. Troleo Quiz 1
  • 12. // Named function function add(x: number, y: number): number { return x + y; } // Named function num add(num x, num y) { return x + y; } Tipos // Anonymous arrow function EC6 let myAdd = (x:number, y:number):number => x+y; // Anonymous function let myAdd = (baseValue: number, increment: number) => number = function(x: number, y: number): number { return x + y; }; / Anonymous function num myAdd = ( num x, num y) => x+y;
  • 13. let a = 3; //inference, x:number var a = 3; //Optional types, dynamic, not inference Tipos: Inferencia // Anonymous arrow function EC6 let myAdd = (x:number, y:number):number => x+y; //inference, myAdd: (number, number) => number // Anonymous function num myAdd = ( num x, num y) => x+y;
  • 14. // Anonymous function int myAdd = ( int x, int y) => x+y; int myAdd = ( num x, num y) => x+y; //Implicit cast // Anonymous arrow function EC6 let myAdd = (x:number, y:number):number => x+y; // Named function function add(x: number, y: number): number { return x + y; } // Named function int add(int x, int y) { return x + y; } Tipos Básicos number: double-precision 64-bit (IEEE) int <: num
  • 16. var parrot: Parrot = new Sparrow(); ¿? var sparrow: Sparrow = new Parrot(); ¿? Troleo Quiz 2 class Sparrow { sound = "cheep"; } class Parrot { sound = "squawk"; } class Duck { sound = "quack"; swim(){ alert("Going for a dip!"); } } Sustituíble Sustituíble
  • 17. var parrot2: Parrot= new Duck(); ¿? var duck: Duck = new Parrot(); ¿? Troleo Quiz 2 class Sparrow { sound = "cheep"; } class Parrot { sound = "squawk"; } class Duck { sound = "quack"; swim(){ alert("Going for a dip!"); } } Sustituíble IDE & compiler error
  • 18. ¿Por qué? Duck Typing: El conjunto de métodos y propiedades determina la semántica Troleo Quiz 2
  • 19. Dart utiliza Duck Typing dinámico ( en tiempo de ejecución) o Dart utiliza Duck Typing estático (en tiempo de compilación) activando el checked mode Troleo Quiz 2 TypeScript utiliza Duck Typing estático ( en tiempo de compilación) Hace posible la implementación ágil de interfaces, el uso de union types, …
  • 21. class Animal { name: string; constructor(name: string) { this.name = name; } move(distanceInMeters: number = 0) { console.log(`${this.name} moved ${distanceInMeters}m.`); } } class Animal { String name; Animal( String name ) {this.name = name; } move( num distanceInMeters = 0){ print(“${this.name} moved ${distanceInMeters}m.”); } } Clases
  • 22. interface Criature { name: string; weight?: number; //Optional } class Criature { String name = “bicho”; num weight; } Interfaces y Clases abstractas abstract class Animal implements Criature { name = “bicho” constructor(name: string) { this.name = name; } move(distanceInMeters: number = 0) { console.log(`${this.name} moved ${distanceInMeters}m.`); } } abstract class Animal implements Criature { String name = “Animal”; num weight; //Required Animal( String name ) {this.name = name; } move( num distanceInMeters = 0){ print(“${this.name} moved ${distanceInMeters}m.”); } }
  • 23. class Animal { name: string; constructor(name: string) { this.name = name; } move(distanceInMeters: number = 0) { console.log(`${this.name} moved ${distanceInMeters}m.`); } } class Snake extends Animal { constructor(name: string) { super(name); } move(distanceInMeters = 5) { console.log("Slithering..."); super.move(distanceInMeters); } } class Animal { String name; Animal( String name ) {this.name = name; } move( num distanceInMeters = 0){ print(“${this.name} moved ${distanceInMeters}m.”); } } class Snake extends Animal { Snake(String name): super(name); move(distanceInMeters = 5) { print("Slithering..."); super.move(distanceInMeters); } } Herencia y polimorfismo
  • 25. var f = new Foo(); f.myMethod(1); ¿? Troleo Quiz 3 class Foo { myMethod(a: number){ alert(a.toString()); } myMethod(a: string) { alert(a); } } var f = new Foo(); f.myMethod(1); IDE & compiler error
  • 26. ¿Por qué? Duplicate method implementation Una única implementación por función. Evítalo utilizando Type union Troleo Quiz 3
  • 27. Módulos, Colecciones y soporte asíncrono Round 4
  • 28. // models/Dog.ts class Dog { name:string; constructor(name:string) {this.name = name;} makeSound() { return "guau"; } } export = Dog; // models/Dog.dart class Dog { String name; Dog(String name) {this.name = name;} makeSound() { return "guau"; } } Módulos ___________________________ // main.ts import Dog = require('models/Dog'); var dog = new Dog(“Pancho”); console.log(dog.makeSound()); ____________________________ // main.dart import 'models/Dog.dart' show Dog; var dog = new Dog(“Pancho”); print(dog.makeSound());
  • 29. // Arrays let numberList: number[] = [1, 2, 3]; let numberList: Array<number> = [1, 2, 3]; // Enums enum Color {Red, Green, Blue}; let c: Color = Color.Green; // Tuples let x: [string, number]; x = ["hello", 10]; // OK x = [10, "hello"]; // Error // Sin soporte nativo para Maps, Sets, ... // ES6 MapCollections // Lists List numberList = [1, 2, 3]; List<string, num> x = ["hello", 10]; //Tuple //Enums enum Color {Red, Green, Blue}; Color c = Color.Green //Maps var accounts = {'bob@example.com': new Account(/* … */), 'john@example.com': new Account(/* … */)}; //Set, Queue, … //Soporte a muchas más colecciones (e implementaciones) a través del paquete collections Colecciones
  • 30. ● Nativamente ○ Futuros ■ Async/await ■ Future API ○ Streams ■ Asynchronous for loop ■ Stream API ● A través de ES6 ○ Async/await ○ Promesas ● Librerías de terceros ○ Streams Soporte asíncrono
  • 31. async function doPing() { await ping(); } async function ping() { for (var i = 0; i < 10; i++) { await delay(300); console.log(“ping”); } } function delay(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } doPing(); doPing() async { await ping(); } ping() async { for (var i = 0; i < 10; i++) { await delay(300); print(“ping”); } } Future delay(num ms) { return new Future.delayed(ms)); } doPing(); Async/await, promesas y futuros
  • 32. Arquitectura de proyecto en TypeScript Troleo Quiz 4
  • 33. ¿Angular2 está pensado para TypeScript? ¿? Troleo Quiz 4 ¿Typescript es todo lo que necesito? ¿? NPM SystemJs Jasmine Js minification Gulp ... Sí, pero Angular 2 nace de AngularDart!
  • 35. ● Librerías propias ○ Existen 3200 ● JS interop (bidireccional) @JS("addLibrary"); external String add(obj); print(add(1,2)); ● Frameworks ○ Angular2 (nace de Dart) ○ Polymer ○ React ○ ... ● Librerías propias ● JS interop (bidireccional) import add = require('addLibrary'); console.log(add(1, 2)); ● Frameworks ○ Angular2 ○ Polymer ○ React ○ ... Librerías y frameworks
  • 36. ● Online compiler ○ https://dartpad.dartlang.org/ ● Requisitos ○ WebApp -> Chromium, Dart2js ○ Script or server -> Dartium ○ Mobile -> Flutter ● IDE’s ○ WebStorm ○ Sublime Text ○ Atom ○ WebStorm ○ Emacs/Vim ● Online compiler ○ http://www.typescriptlang.org/play/ ● Requisitos ○ WebApp -> Transpiler ○ Script or server -> NodeJS ○ Mobile -> Ionic + Angular, … ● IDE’s ○ Visual Studio Code ○ Visual Studio > 2013 ○ Sublime Text ○ Atom ○ Eclipse ○ WebStorm ○ Emacs/Vim Tools
  • 37. Nadie usa Dart. Sin comunidad. ¡Es suicidio profesional! Troleo Quiz 5
  • 38. ¿Comunidad en stack overflow? ¿? ¿El equipo de Google Dart me da soporte directo por slack? ¿? Troleo Quiz 5 ¿Aplicaciones reales (y grandes) con Dart? ¿?AdWords y Greentea 15.362 hilos Tiempo medio de respuesta = ¡¡ 6 min !!
  • 40. Troleo Quiz 5 ¡Es un suicidio profesional!
  • 41. ¡Gracias! ¿Preguntas? Dart como alternativa a Typescript @rafbermudez