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 (20)

PDF
Ejercicios resueltos practica 2 (nueva 2014) informática ii
Alvin Jacobs
 
DOCX
Informe tecnico
Sandra Guadalupe Canche Dzul
 
PDF
Pensando funcionalmente
Denis Fuenzalida
 
DOCX
Hechos en clase
Řỉgö VẻGầ
 
DOCX
Jorge informe tecnico
Jorge Ake Pech
 
PDF
Ejercicios en Netbeans
edgar muñoz
 
ODP
Ajax
ousli07
 
PDF
Problemas+resueltos+de+c$2 b$2b
FRESH221 C.R
 
PDF
Introducción a Swift
betabeers
 
DOCX
Practica de programacion 21 28
Dariio Lopezz Young
 
PDF
Charla congreso web introducción programación funcional en JavaScript
Ricardo Pallás Román
 
PDF
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
José Antonio Sandoval Acosta
 
PDF
Curso iOS
Platzi
 
PPT
Taller processing arduino
jesusresta
 
PDF
Curso Swift
Platzi
 
PDF
ORM Doctrine
Decharlas
 
PDF
Ejemplo de aplicación cliente-servidor en C#
José Antonio Sandoval Acosta
 
DOCX
Arreglos en C++
Santiago Sarmiento
 
PPTX
Javascript
Victor Alfonzo Marquina
 
PDF
Curso android studio
Bryan Asto Campos
 
Ejercicios resueltos practica 2 (nueva 2014) informática ii
Alvin Jacobs
 
Pensando funcionalmente
Denis Fuenzalida
 
Hechos en clase
Řỉgö VẻGầ
 
Jorge informe tecnico
Jorge Ake Pech
 
Ejercicios en Netbeans
edgar muñoz
 
Ajax
ousli07
 
Problemas+resueltos+de+c$2 b$2b
FRESH221 C.R
 
Introducción a Swift
betabeers
 
Practica de programacion 21 28
Dariio Lopezz Young
 
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
José Antonio Sandoval Acosta
 
Curso iOS
Platzi
 
Taller processing arduino
jesusresta
 
Curso Swift
Platzi
 
ORM Doctrine
Decharlas
 
Ejemplo de aplicación cliente-servidor en C#
José Antonio Sandoval Acosta
 
Arreglos en C++
Santiago Sarmiento
 
Curso android studio
Bryan Asto Campos
 

Destacado (20)

PDF
Pearson Acclaim Assembled Ed Presentation
GeneralAssembly_DC
 
PPTX
Boxnews.com.ua 2016
MAGNET Media Holding
 
PPTX
ин ян
Plamenchetoo
 
PDF
Toothbrush
John Gaglio
 
PDF
Learn DC Assembled Education Presentation
GeneralAssembly_DC
 
PDF
Education B2B @CESAR
CESAR
 
PPTX
Evaluation- Question 3
Tillypeasnell
 
PDF
What is skeena2050
Bradley Oldham
 
PPTX
Garage door springs
donve33
 
PDF
Китай.China
Anastasia Engelhardt
 
PPT
Baocaocuoiki
hogphuc92
 
PPT
показательная и логарифмическая функции
kos9ik
 
PDF
Lecture01
Lã Văn Hải
 
PDF
PeaceIIILimavadyJune 2013
Sinéad Lynch
 
PDF
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
iamnanda301
 
PDF
Recap of 2014 meeting and this meeting’s Objectives
Ethical Sector
 
PPTX
Thay Peraza
Marianna Yépez
 
PDF
Monitor i2757Fh / i2757Fm
AOC vision
 
PDF
Monitor LED AOC - e2371F
AOC vision
 
PDF
Creative Toolbox Photography
CreativeToolbox
 
Pearson Acclaim Assembled Ed Presentation
GeneralAssembly_DC
 
Boxnews.com.ua 2016
MAGNET Media Holding
 
ин ян
Plamenchetoo
 
Toothbrush
John Gaglio
 
Learn DC Assembled Education Presentation
GeneralAssembly_DC
 
Education B2B @CESAR
CESAR
 
Evaluation- Question 3
Tillypeasnell
 
What is skeena2050
Bradley Oldham
 
Garage door springs
donve33
 
Китай.China
Anastasia Engelhardt
 
Baocaocuoiki
hogphuc92
 
показательная и логарифмическая функции
kos9ik
 
Lecture01
Lã Văn Hải
 
PeaceIIILimavadyJune 2013
Sinéad Lynch
 
[경험디자인] 영화예매 경험개선을 위한 시네마할인가이드
iamnanda301
 
Recap of 2014 meeting and this meeting’s Objectives
Ethical Sector
 
Thay Peraza
Marianna Yépez
 
Monitor i2757Fh / i2757Fm
AOC vision
 
Monitor LED AOC - e2371F
AOC vision
 
Creative Toolbox Photography
CreativeToolbox
 
Publicidad

Similar a Dart como alternativa a TypeScript (Codemotion 2016) (20)

PDF
JavaScript Contemporáneo - Carlos E. Cimino.pdf
GabyZiad
 
PDF
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
Micael Gallego
 
PDF
Javascript - 2014
Carlos Alonso Pérez
 
PPTX
Introducción a TypeScript
Pablo Bouzada
 
PDF
Javascript OOP
Gabriel Chertok
 
PDF
adalsus Prep-Course - soyHenry mis apuntes JS.pdf
adal57
 
PDF
ECMAScript 6
Paradigma Digital
 
PDF
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
David Zapateria Besteiro
 
PDF
Introducción a Javascript
Abe Estrada
 
PDF
Ocho cosas que debes saber de JavaScript
David Ballén
 
PDF
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
Micael Gallego
 
PDF
TypeScript - Angular 2 - ionic 2
Micael Gallego
 
PDF
2.1 Introducción a TypeScript (Conceptos basicos)
Ram Vazquez
 
PPTX
FORMATO DIAPOSITIVAS - dart y flutter.pptx
EMMAFLORESCARMONA
 
PDF
Clase 7 objetos globales de javaScript
José Ricardo Tillero Giménez
 
PDF
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego
 
PDF
Dotnetmania 9 pag_21_29
Eduardo Ramirez
 
PPTX
Mas alla de javascript con typescript
Leonardo Micheloni
 
PPTX
JavaScript Avanzado con Node.js para Desarrollo Web
CESARHERNANPATRICIOP1
 
PDF
Javascript
Carlos Alonso Pérez
 
JavaScript Contemporáneo - Carlos E. Cimino.pdf
GabyZiad
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
Micael Gallego
 
Javascript - 2014
Carlos Alonso Pérez
 
Introducción a TypeScript
Pablo Bouzada
 
Javascript OOP
Gabriel Chertok
 
adalsus Prep-Course - soyHenry mis apuntes JS.pdf
adal57
 
ECMAScript 6
Paradigma Digital
 
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
David Zapateria Besteiro
 
Introducción a Javascript
Abe Estrada
 
Ocho cosas que debes saber de JavaScript
David Ballén
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
Micael Gallego
 
TypeScript - Angular 2 - ionic 2
Micael Gallego
 
2.1 Introducción a TypeScript (Conceptos basicos)
Ram Vazquez
 
FORMATO DIAPOSITIVAS - dart y flutter.pptx
EMMAFLORESCARMONA
 
Clase 7 objetos globales de javaScript
José Ricardo Tillero Giménez
 
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego
 
Dotnetmania 9 pag_21_29
Eduardo Ramirez
 
Mas alla de javascript con typescript
Leonardo Micheloni
 
JavaScript Avanzado con Node.js para Desarrollo Web
CESARHERNANPATRICIOP1
 
Publicidad

Más de Rafael Bermúdez Míguez (9)

PDF
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Rafael Bermúdez Míguez
 
PDF
Desafío total: cómo resolver retos extremos
Rafael Bermúdez Míguez
 
PDF
Gorm for cassandra
Rafael Bermúdez Míguez
 
PPTX
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Rafael Bermúdez Míguez
 
PPTX
Cross management experiences. mis 7 conclusiones
Rafael Bermúdez Míguez
 
PPTX
Piensa en grande: Big data para programadores
Rafael Bermúdez Míguez
 
PDF
Acercádonos a dart
Rafael Bermúdez Míguez
 
PDF
Crea tu propio motor de videojuegos con backbone y canvas (html5)
Rafael Bermúdez Míguez
 
PDF
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
Rafael Bermúdez Míguez
 
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
Rafael Bermúdez Míguez
 
Gorm for cassandra
Rafael Bermúdez Míguez
 
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Rafael Bermúdez Míguez
 
Cross management experiences. mis 7 conclusiones
Rafael Bermúdez Míguez
 
Piensa en grande: Big data para programadores
Rafael Bermúdez Míguez
 
Acercádonos a dart
Rafael Bermúdez Míguez
 
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...
Rafael Bermúdez Míguez
 

Último (16)

PPTX
HARDWARE ponderaciones y placas madre.pptx
jjcondori21
 
PDF
Curso.Formacion.dron.A1.A3.Completo.v1.pdf
jimenoasenjo1
 
PPTX
MAQUINA DE TURING Y VARIANTES DEL LA MAQUINA DE TURING.pptx
GabyBraga4
 
PPTX
Revolucionando-los-Informes-Tecnicos-con-IA.pptx
DanielChura9
 
PPTX
Presentación_Estación_Total_Temas_Definidos.pptx fin.pptx
ximenamondrianbecerr
 
PDF
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
Jose Manuel Ortega Candel
 
PPTX
Presentación de servicios XMS (2025) - Partner Microsoft
INBOUND PLUS SpA
 
PPTX
Poblacion_y_Muestra para trabajos de investigación pptx
yaneligomezcaceres
 
PDF
Distribución de frecuencias y Diagrama de Pareto en Excel - Trabajo Colaborat...
mapaulahiguita
 
PPTX
ESPECIALIDAD DE REDES SOCIALES guías mayores.pptx
DianaLauraMadridEsco1
 
PPT
(cloud computing) se refiere al acceso a recursos informáticos a través de in...
75485218
 
PPTX
Manejo de Web de demostración modulo IOT.pptx
IsaacFernandoPrezSal1
 
PPTX
UiPath and Dream to Succeed Kick Off 2025 AI Agentic Automation RPA Program 2025
DianaGray10
 
PDF
albañileriaalbañileriaalbañileriaalbañileriaalbañileria
danteisrael987654321
 
PDF
Exposición Rayleigh, teoría de la comunicación, etsii tugr
DanielPereiraRiquelm
 
PPTX
presentación a introducción de mantenimiento.pptx
ubaldoGonzalez16
 
HARDWARE ponderaciones y placas madre.pptx
jjcondori21
 
Curso.Formacion.dron.A1.A3.Completo.v1.pdf
jimenoasenjo1
 
MAQUINA DE TURING Y VARIANTES DEL LA MAQUINA DE TURING.pptx
GabyBraga4
 
Revolucionando-los-Informes-Tecnicos-con-IA.pptx
DanielChura9
 
Presentación_Estación_Total_Temas_Definidos.pptx fin.pptx
ximenamondrianbecerr
 
Seguridad y auditorías en Modelos grandes del lenguaje (LLM)
Jose Manuel Ortega Candel
 
Presentación de servicios XMS (2025) - Partner Microsoft
INBOUND PLUS SpA
 
Poblacion_y_Muestra para trabajos de investigación pptx
yaneligomezcaceres
 
Distribución de frecuencias y Diagrama de Pareto en Excel - Trabajo Colaborat...
mapaulahiguita
 
ESPECIALIDAD DE REDES SOCIALES guías mayores.pptx
DianaLauraMadridEsco1
 
(cloud computing) se refiere al acceso a recursos informáticos a través de in...
75485218
 
Manejo de Web de demostración modulo IOT.pptx
IsaacFernandoPrezSal1
 
UiPath and Dream to Succeed Kick Off 2025 AI Agentic Automation RPA Program 2025
DianaGray10
 
albañileriaalbañileriaalbañileriaalbañileriaalbañileria
danteisrael987654321
 
Exposición Rayleigh, teoría de la comunicación, etsii tugr
DanielPereiraRiquelm
 
presentación a introducción de mantenimiento.pptx
ubaldoGonzalez16
 

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 ● [email protected]
  • 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 = {'[email protected]': new Account(/* … */), '[email protected]': 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