SlideShare una empresa de Scribd logo
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

Más contenido relacionado

La actualidad más candente

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
Alvin Jacobs
 
Informe tecnico
Informe tecnicoInforme tecnico
Pensando funcionalmente
Pensando funcionalmentePensando funcionalmente
Pensando funcionalmente
Denis Fuenzalida
 
Jorge informe tecnico
Jorge informe tecnicoJorge informe tecnico
Jorge informe tecnico
Jorge Ake Pech
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Ajax
AjaxAjax
Ajax
ousli07
 
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 Swift
betabeers
 
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
Ricardo 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 cadenas
José Antonio Sandoval Acosta
 
Curso iOS
Curso iOSCurso iOS
Curso iOS
Platzi
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduino
jesusresta
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
Platzi
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM DoctrineDecharlas
 
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#
José Antonio Sandoval Acosta
 
Curso android studio
Curso android studioCurso android studio
Curso android studio
Bryan Asto Campos
 

La actualidad más candente (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
 

Destacado

Pearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed PresentationPearson Acclaim Assembled Ed Presentation
Pearson Acclaim Assembled Ed PresentationGeneralAssembly_DC
 
Boxnews.com.ua 2016
Boxnews.com.ua 2016Boxnews.com.ua 2016
Boxnews.com.ua 2016
MAGNET Media Holding
 
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 @CESAR
CESAR
 
Evaluation- Question 3
Evaluation- Question 3Evaluation- Question 3
Evaluation- Question 3
Tillypeasnell
 
What is skeena2050
What is skeena2050What is skeena2050
What is skeena2050
Bradley Oldham
 
Garage door springs
Garage door springsGarage door springs
Garage door springsdonve33
 
Китай.China
Китай.ChinaКитай.China
Китай.China
Anastasia Engelhardt
 
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 Objectives
Ethical Sector
 
Thay Peraza
Thay PerazaThay Peraza
Thay Peraza
Marianna Yépez
 
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 - e2371F
AOC vision
 
Creative Toolbox Photography
Creative Toolbox PhotographyCreative Toolbox Photography
Creative Toolbox Photography
CreativeToolbox
 

Destacado (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
 

Similar a Dart como alternativa a TypeScript (Codemotion 2016)

Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
dhaat
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
Paradigma Digital
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcionalLeonardo Soto
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
Jose Emilio Labra Gayo
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
Jose Emilio Labra Gayo
 
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
Jose Juan R. Zuñiga
 
Lo que las empresas piden
Lo que las empresas pidenLo que las empresas piden
Lo que las empresas pidenSvet Ivantchev
 
P1
P1P1
Informe minishell
Informe minishellInforme minishell
Informe minishell
Alex Pin
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++Riki Tapia
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datosRiki Tapia
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
Amado Arcaya
 
Cpp
CppCpp
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en Cdegarden
 

Similar a 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
 

Más 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 extremos
Rafael Bermúdez Míguez
 
Gorm for cassandra
Gorm for cassandraGorm for cassandra
Gorm for cassandra
Rafael 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 conclusiones
Rafael 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 programadores
Rafael Bermúdez Míguez
 
Acercádonos a dart
Acercádonos a dartAcercádonos a dart
Acercádonos a dart
Rafael 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
 

Más 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...
 

Último

modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
yuki22434
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
JuanAlvarez413513
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.pptTEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
SandroNava1
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
SERVANDOBADILLOPOLEN
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 

Último (20)

modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.pptTEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 

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