Domando a Complexidade do Desenvolvimento Web com...

75
Domando a complexidade do desenvolvimento Web com TypeScript Elemar Jr

Transcript of Domando a Complexidade do Desenvolvimento Web com...

Page 1: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Domando a complexidade do desenvolvimento Web

com TypeScript

Elemar Jr

Page 2: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Elemar Júnior

Microsoft Most Valuable Professional (MVP)

Arquiteto de Soluções na Promob há 17 anos

elemarjr.net

github.com/elemarjr

twitter.com/elemarjr

linkedin.com/elemarjr

Page 3: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Por que TypeScript? Por que agora?

Page 4: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#0. JavaScript é universal

Page 5: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#1. Você sabe JavaScript?

Page 6: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#2 E o seu time, sabe?

Page 7: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

function sortByName(a) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localCompare(y.name);});return result;

}

O que você acha desse código?

Page 8: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

E deste código aqui?

function buildName(firstName) {var restOfName = [];for (var _i = 1; _i < arguments.length; _i++) {

restOfName[_i - 1] = arguments[_i];}return firstName + " " + restOfName.join(" ");

}

Page 9: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 10: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#3 Desenvolvimento em

grande escala com JavaScript

é difícil.

Anders Hejlsberg

Page 11: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Muito código inteligente (!?)

var Geometry;(function (Geometry) {

var Point = (function () {function Point(x, y) {

if (x === void 0) { x = 0; }if (y === void 0) { y = 0; }this.x = x;this.y = y;

}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};return Point;

})();Geometry.Point = Point;

})(Geometry || (Geometry = {}));

Page 12: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#4 TypeScript é OPT-IN

Page 13: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

TypeScript é

(1) um “superset“ tipado de JavaScript que

(2) compila para JavaScript.

Page 14: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Compilador

TypeScriptTS JS

Page 15: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

function sortByName(a: any[]) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localCompare(y.name);});return result;

}

Adicionando um Type Annotation

Page 16: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Com suporte a “Structural Typing”

interface Entity {name: string;

}

function sortByName(a: Entity[]) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localeCompare(y.name);});return result;

}

Page 17: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Sem impactos para o código JS

Page 18: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Qualquer browser, host ou SO

Page 19: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#4 Compatível com a

evolução do ECMAScript

Page 20: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#5 Tooling

Page 21: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

O que é TypeScript?

Page 22: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 23: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Habilita ferrametas de Refactoring

interface Entity {name: string;

}

function sortByName(a: Entity[]) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localeCompare(y.name);});return result;

}

Page 24: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Sublime Text

function calculateArea(height: number, width: number): number {return height * width;

}

http://developer.telerik.com/featured/the-rise-of-typescript/

Page 25: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Sublime Text

http://developer.telerik.com/featured/the-rise-of-typescript/

Page 26: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#6 Open Source

https://github.com/Microsoft/TypeScript/

Page 27: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#7 Structural Typing

Page 28: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

interface Point {x: number;y: number;

}

var p: Point = {x: 10, y: 20

}

var p2 = {x: 10, y: 20

}

Com suporte a “Structural Typing”

Page 29: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

interface Point {x: number;y: number;z?: number;

}

var p: Point = {x: 10, y: 20

}

Com suporte a “Structural Typing”

Page 30: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Com suporte a “Structural Typing”

interface Product {name: string;price: number;getName(): string;setName(value: string): void;

}

var p: Product ={

name: "Promob Plus",price: 2500,getName: function () { return this.name; },setName: function (value) { this.name = value; }

}

Page 31: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#8 Generics

Page 32: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Generics

interface Entity {name: string;

}

function sortByName(a: Entity[]) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localeCompare(y.name);});return result;

}

var people = [{ name: "Gabriel", age: 15 },{ name: "Elemar", age: 35 },{ name: "Ana", age: 18 }

];

var sorted = sortByName(people);

sorted[0].

Page 33: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Generics

interface Entity {name: string;

}

function sortByName<T extends Entity>(a: T[]) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localeCompare(y.name);});return result;

}

var people = [{ name: "Gabriel", age: 15 },{ name: "Elemar", age: 35 },{ name: "Ana", age: 18 }

];

var sorted = sortByName(people);

sorted[0].

Page 34: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Generics não tem “peso” em tempo de execuçãoTS JS

interface Entity {name: string;

}

function sortByName<T extends Entity>(a: T[]) {var result = a.slice(0);result.sort(function (x, y) {

return x.name.localeCompare(y.name)})

}

function sortByName(a) {var result = a.slice(0);result.sort(function (x, y) {

return x.name.localeCompare(y.name);});

}

Page 35: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#9 Lambdas

Page 36: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Lambda, Lambda!TS JS

function sortByName<T extends Entity>(a: T[]) {var result = a.slice(0);result.sort(

(x, y) => x.name.localeCompare(y.name));

}

function sortByName(a) {var result = a.slice(0);result.sort(function(x, y) {

return x.name.localeCompare(y.name);});

}

Page 37: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

interface Entity {name: string;

}

function sortBy<T extends Entity>(a: T[], keyOf: (item: T) => any) {const result = a.slice(0);result.sort((x, y) => {

var keyOfX = keyOf(x);var keyOfY = keyOf(y);return keyOfX > keyOfY ? 1 : keyOfX < keyOfY ? -1 : 0;

});return result;

}

var people = [{ name: "Gabriel", age: 15 },{ name: "Elemar", age: 35 },{ name: "Ana", age: 18 }

];

var sorted = sortBy(people, x => x.name);

Lambda, Lambda!

Page 38: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#10 Classes

Page 39: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Classes sem improvisoTS JS

class Point {x: number;y: number;

}

var p = new Point();p.x = 3;p.y = 4;

var Point = (function () {function Point() {}return Point;

})();var p = new Point();p.x = 3;p.y = 4;

Page 40: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Classes sem improvisoTS JS

class Point {x: number;y: number;

}

var p = new Point();p.x = 3;p.y = 4;

var Point = (function () {function Point() {}return Point;

})();var p = new Point();p.x = 3;p.y = 4;

Page 41: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

ConstrutoresTS JS

class Point {x: number;y: number;constructor(x: number, y: number) {

this.x = x;this.y = y;

}}var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

this.x = x;this.y = y;

}return Point;

})();var p = new Point(3, 4);

Page 42: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Construtores – Inicialização simplesTS JS

class Point {constructor(

public x: number, public y: number)

{}}var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

this.x = x;this.y = y;

}return Point;

})();var p = new Point(3, 4);

Page 43: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

MétodosTS JS

class Point {constructor(

public x: number,public y: number) {

}

distanceTo(other: Point) {var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

}}var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

this.x = x;this.y = y;

}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};return Point;

})();var p = new Point(3, 4);

Page 44: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Parâmetros múltiplosTS JS

function buildName(firstName: string,...restOfName: string[]) {

return firstName + " " + restOfName.join(" ");}

var name = buildName("Elemar","Rodrigues","Severo","Junior");

function buildName(firstName) {var restOfName = [];for (var _i = 1; _i < arguments.length; _i++) {

restOfName[_i - 1] = arguments[_i];}return firstName + " " + restOfName.join(" ");

}

Page 45: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Membros privadosTS JS

class Point {private distanceToOrigin: number;constructor(

public x: number = 0,public y: number = 0) {this.distanceToOrigin =

this.distanceTo(Point.zero);}

distanceTo(other: Point) {var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

}

static zero = new Point(0, 0);}

var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

if (x === void 0) { x = 0; }if (y === void 0) { y = 0; }this.x = x;this.y = y;this.distanceToOrigin =

this.distanceTo(Point.zero);}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};Point.zero = new Point(0, 0);return Point;

})();var p = new Point(3, 4);

Page 46: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Membros estáticosTS JS

class Point {constructor(

public x: number,public y: number) {

}

distanceTo(other: Point) {var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

}

static zero = new Point(0, 0);}var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

this.x = x;this.y = y;

}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};

Point.zero = new Point(0, 0);return Point;

})();var p = new Point(3, 4);

Page 47: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Valores default em argumentosTS JS

class Point {constructor(

public x: number = 0,public y: number = 0) { }

distanceTo(other: Point) {var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

}

static zero = new Point(0, 0);}

var p = new Point(3, 4);

var Point = (function () {function Point(x, y) {

if (x === void 0) { x = 0; }if (y === void 0) { y = 0; }this.x = x;this.y = y;

}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};Point.zero = new Point(0, 0);return Point;

})();var p = new Point(3, 4);

Page 48: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 49: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

RECREIO

Page 50: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

DEMO: Starfield

http://elemarjr.github.io/demos/starfield.html

Page 51: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Abstraindo aplicação

interface IApp {init(): IApp;run();

}

window.onload = () => {new App()

.init()

.run();};

Page 52: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Implementação da aplicação

class App implements IApp {private engine: RenderingEngine;private stars: Array<IStar>;

init(): App {this.initEngine();this.initStars();return this;

}/*...*/run(): void {

var that = this;var iterate = () => {

that.engine.clear();that.stars.forEach((star) => star.update().draw(this.engine));setTimeout(iterate, 33);

};iterate();

}

Page 53: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Abstraindo uma entidade

interface IStar {position: Point3;shade: number;size: number;

update(): IStar;draw(engine: IRenderingEngine): IStar;

}

Page 54: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Abstraindo uma entidade

class Star implements IStar {position: Point3;size = 0;shade = 0;

constructor() {this.reset();this.position.z = Random.inRange(0, 32);

}

private reset(): void {this.position = Point3.random();

}

update(): IStar {this.position.z -= 0.2;if (this.position.z <= 0) this.reset();this.size = (1 - this.position.z / 32.0) * 5;this.shade = Math.floor((1 - this.position.z / 32.0) * 255);return this;

}

draw(engine: IRenderingEngine): IStar {engine.drawStar(this);return this;

}};

Page 55: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Ponto3

class Point3 {constructor(

public x: number,public y: number,public z: number) { }

static random(): Point3 {return new Point3(

Random.inRange(-20, 20),Random.inRange(-20, 20),Random.inRange(0, 32));

}}

Page 56: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Abstraindo um “RenderingEngine”

interface IRenderingEngine {clear(): void;drawStar(start: IStar): void;

}

Page 57: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Abstraindo um “RenderingEngine”

class RenderingEngine implements IRenderingEngine {private canvas: HTMLCanvasElement;private context: CanvasRenderingContext2D;

constructor(canvas: HTMLCanvasElement) {this.canvas = canvas;this.context = canvas.getContext("2d");

}

clear(): void {this.context.fillStyle = `rgb(0, 0, 0)`;this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);

}

drawStar(star: IStar): void {const k = 128 / star.position.z;const px = star.position.x * k + (this.canvas.width / 2);const py = star.position.y * k + (this.canvas.height / 2);if (px >= 0 && px <= this.canvas.width && py >= 0 && py <= this.canvas.height) {

const s = star.shade;this.context.fillStyle = `rgb(${s}, ${s}, ${s})`;this.context.fillRect(px, py, star.size, star.size);

}}

};

Page 58: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#11 Módulos

Page 59: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

MódulosTS JS

module Geometry {export class Point {

constructor(public x: number = 0,public y: number = 0) {

}

distanceTo(other: Point) {var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

}}

}

var Geometry;(function (Geometry) {

var Point = (function () {function Point(x, y) {

if (x === void 0) { x = 0; }if (y === void 0) { y = 0; }this.x = x;this.y = y;

}Point.prototype.distanceTo = function (other) {

var dx = this.x - other.x;var dy = this.y - other.y;return Math.sqrt(dx * dx + dy * dy);

};return Point;

})();Geometry.Point = Point;

})(Geometry || (Geometry = {}));

Page 60: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#12 Ótimo para explorar

bibliotecas de terceiros

Page 61: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 62: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Um TypeDefinition

// Type definitions for poly2tri v1.3.5// Project: http://github.com/r3mi/poly2tri.js/// Definitions by: Elemar Junior <https://github.com/elemarjr/>// Definitions: https://github.com/borisyankov/DefinitelyTyped

declare module poly2tri {

interface IPointLike {x: number;y: number;

}

class Point implements IPointLike {

x: number;y: number;

constructor(x: number, y: number);

toString(): string;

toJSON(): JSON;

set_zero(): Point;

set(x: number, y: number): Point;

Page 63: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

#13 Muito mais coisas legais

Page 64: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Criação de objetos e atribuições facilitadasTS JS

function point(x: number, y: number, z: number) {return { x, y, z };

}

let {x, y} = point(10, 10, 5);

function point(x, y, z) {return { x: x, y: y, z: z };

}var _a = point(10, 10, 5), x = _a.x, y = _a.y;

Page 65: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Criação de objetos e atribuições facilitadasTS JS

let a = [1, 2, 3, 4, 5];let [first, ...rest] = a;let b = [first, ...rest, 10, 20, 30];

var a = [1, 2, 3, 4, 5];var first = a[0], rest = a.slice(1);var b = [first].concat(rest, [10, 20, 30]);

Page 66: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

For .. ofTS JS

for (var element of b) {console.log(element);

}

for (var _i = 0; _i < b.length; _i++) {var element = b[_i];console.log(element);

}

Page 67: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Type Guards

Page 68: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Type Guards

Page 69: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Type Guards

Page 70: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Bônus: O futuro do TypeScript

Page 71: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 72: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 73: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)
Page 74: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Finalizando, typescript é ...

• Um superset para a JavaScript que compila para JavaScript, com

ótimo tooling

• Uma “ponte” para desenvolvedores acostumados com

linguagens tipadas

• Uma alternativa séria para redução da “curva de aprendizado”

• Ideal para sistemas grandes e complexos

• Uma antecipação do que estará disponível no futuro

(ECMAScript)

• Open Source

Page 75: Domando a Complexidade do Desenvolvimento Web com …qconrio.com/rio2015/system/files/presentation-slides/qcon2015-rc1.pdf · Elemar Júnior Microsoft Most Valuable Professional (MVP)

Muito obrigado.https://github.com/ElemarJR/feedback