GDG DART Event at Karachi

68
#dartlang Dart Flight School Speaker Imam Raza Licensed under http://creativecommons.org/licenses/by-nc/3.0/us/

description

 

Transcript of GDG DART Event at Karachi

Page 1: GDG DART Event at Karachi

#dartlang

Dart Flight SchoolSpeaker Imam Raza

Licensed under http://creativecommons.org/licenses/by-nc/3.0/us/

Page 2: GDG DART Event at Karachi

#dartlang

Speaker.bio.toString()● 12 years of professional experience.● Specialties include; Enterprise Software Architecture, Mobile devices

Architecture and software services including consulting, outsourcing and offshoreincubation.

● Currently engaged with Folio3 as Senior Software Architect.● Motivation for today speech. Exploring latest technologies and creating awareness

about them is my hobby.

Page 3: GDG DART Event at Karachi

#dartlang

Page 4: GDG DART Event at Karachi

#dartlang

✔ Improved productivity✔ Increased performance

Why ?

Page 5: GDG DART Event at Karachi

#dartlang

✔ a new language(Javascript,JAVA/C# developer)✔ Libraries✔ Editor✔ VM✔ Browser that can run dart app natively✔ Compiler to Javascript.

What is

Page 6: GDG DART Event at Karachi

#dartlang

✔ Classes: JS Prototyped based language and Not class-based language✔ Static Typing: JS doesn’t support✔ Language support for libraries:

JavaScript Vs Dart(LanguageComparison)

Page 7: GDG DART Event at Karachi

#dartlang

Learn the language in under an hour

Page 8: GDG DART Event at Karachi

#dartlang

Use the tools you already know

Page 9: GDG DART Event at Karachi

#dartlang

Compile to JavaScript, runs across the modern web

Page 10: GDG DART Event at Karachi

#dartlang

Run Dart on the server with the Dart VM

Page 11: GDG DART Event at Karachi

#dartlang

require.js

Backbone

Backbone Marionette

jQuery

Modernizr

moment.js

dest templates

PhantomJS

JasmineDocs

Docs

Docs

Docs

Docs

Docs

Docs

Docs

Docs

"I just want towrite web apps!"

"Hi, I want to builda web app"

Page 12: GDG DART Event at Karachi

#dartlang

Unit test

Dart SDK

Polymer

IntlPackages"Things are

consistent andclear."

Page 13: GDG DART Event at Karachi

#dartlang

Apps start small, but grow and scale

Page 14: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony freeclass Hug { Familiar

Page 15: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony freeclass Hug { num strength; Hug(this.strength);

Terse

Page 16: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony freeclass Hug { num strength; Hug(this.strength); Hug operator +(Hug other) { return new Hug(strength + other.strength); } Operator overriding

Page 17: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony freeclass Hug { num strength; Hug(this.strength); Hug operator +(Hug other) { return new Hug(strength + other.strength); } void patBack({int hands: 1}) { // ... }

Named, optional params w/ default value

Page 18: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony free

// ... Hug operator +(Hug other) { return new Hug(strength + other.strength); } void patBack({int hands: 1}) { // ... } String toString() => "Embraceometer reads $strength";

}

One-line function

Page 19: GDG DART Event at Karachi

#dartlang

Simple syntax, ceremony free

// ... Hug operator +(Hug other) { return new Hug(strength + other.strength); } void patBack({int hands: 1}) { // ... } String toString() => "Embraceometer reads $strength";

}String Interpolation

Page 20: GDG DART Event at Karachi

#dartlang

Clean semantics and behavior

Page 21: GDG DART Event at Karachi

#dartlang

Clean semantics and behavior

• Only true is truthy

• There is no undefined, only null

• No type coercion with ==, +

Examples:

Page 22: GDG DART Event at Karachi

#dartlang

Missing getter?

"hello".missing // ??

Class 'String' has no instance getter 'missing'.NoSuchMethodError : method not found: 'missing'Receiver: "hello"Arguments: []

Logical

Page 23: GDG DART Event at Karachi

#dartlang

String compared to number?

'hello' > 1 // ??

Class 'String' has no instance method '>'.

Logical

Page 24: GDG DART Event at Karachi

#dartlang

Variable scope?

var foo = 'top-level';main() { if (true) { var foo = 'inside'; } print(foo); // ?? What will this print?}

top$levelLogical

Nohoisting

Page 25: GDG DART Event at Karachi

#dartlang

Scope of this?

class AwesomeButton { AwesomeButton(button) { button.onClick.listen((Event e) => this.atomicDinosaurRock()); } atomicDinosaurRock() { /* ... */ }}

Lexicalthis

Page 26: GDG DART Event at Karachi

#dartlang

Scalable structure

Functions Classes

Libraries

Packages

Mixins Interfaces

library games;import 'dart:math';import 'players.dart';class Darts { // ...

}class Bowling { // ...

}Player findOpponent(int skillLevel) { // ...

}

Page 27: GDG DART Event at Karachi

#dartlang

var$button$=$new$ButtonElement();button.id$=$'fancy';button.text$=$'Click$Point';button.classes.add('important');button.onClick.listen((e)$=>$addTopHat());parentElement.children.add(button);

Yikes! Button is repeated 6 times!

Too many buttons

Page 28: GDG DART Event at Karachi

#dartlang

Method cascades

var$button$=$new$ButtonElement()$..id$=$'fancy'$..text$=$'Click$Point'$..classes.add('important')$..onClick.listen((e)$=>$addTopHat());parentElement.children.add(button);

Page 29: GDG DART Event at Karachi

#dartlang

Inline initialization

parentElement.children.add(0new0ButtonElement()..text0=0'Click0Point');

Page 30: GDG DART Event at Karachi

#dartlang

One of these things is not like the other

Object

Persistable

Hug

Hug is notis-a Persistable

Don't polluteyour inheritance

tree!

Page 31: GDG DART Event at Karachi

#dartlang

Don't inherit, mixin!

Object

PersistableHug Mixin

Page 32: GDG DART Event at Karachi

#dartlang

Mixins

abstract'class'Persistable'{'save()'{'...'}'load()'{'...'}'toJson();}class'Hug'extends'Object'with'Persistable'{'Map'toJson()'=>'{'strength':10};}main()'{'var'embrace'='new'Hug();'embrace.save();}''''''''

Extend object & noconstructors? Youcan be a mixin!

Apply the mixin.

Use methods frommixin.

Page 33: GDG DART Event at Karachi

#dartlang

Context switching considered harmful,Iterate quickly

Page 34: GDG DART Event at Karachi

#dartlang

Page 35: GDG DART Event at Karachi

#dartlang

Page 36: GDG DART Event at Karachi

#dartlang

670+packages

Page 37: GDG DART Event at Karachi

#dartlang

Page 38: GDG DART Event at Karachi

#dartlang

Compile Dart to JavaScript with dart2js

Page 39: GDG DART Event at Karachi

#dartlang

main Library

baz foo bar boo

imports

callsbaz

main foo bar

Tree shaking

dart2js

Page 40: GDG DART Event at Karachi

#dartlang

Our challenge ...

clean semantics and unsurprising behaviorwithout

extra checks when compiled to JavaScript

Page 41: GDG DART Event at Karachi

#dartlang

DeltaBlueaddConstraintsConsumingTo(v, coll) { var determining = v.determinedBy; for (var i = 0; i < v.constraints.length; i++) { var c = v.constraints[i]; if (c != determining && c.isSatisfied()) { coll.add(c); } }}

Page 42: GDG DART Event at Karachi

#dartlang

addConstraintsConsumingTo$2: function(v, coll) {

var determining, t1, t2, t3, i, t4, c;

determining = v.get$determinedBy();

t1 = v.constraints;

t2 = getInterceptor$as(t1);

t3 = getInterceptor$a(coll);

i = 0;

while (true) {

t4 = t2.get$length(t1);

if (typeof t4 !== "number") throw new IllegalArgumentError(t4);

if (!(i < t4)) break;

c = t2.$index(t1, i);

if ((c == null ? determining != null : c !== determining) && c.isSatisfied$0() === true) {

t3.add$1(coll, c);

}

++i;

}

}

Simply not goodenough!

DeltaBlue: Unoptimized

Page 43: GDG DART Event at Karachi

#dartlang

Global optimizations• Dart is structured and allows whole program analysis

• Understanding your program’s structure enables:o Code navigation and great refactoring toolso Global compile-time optimizations

Page 44: GDG DART Event at Karachi

#dartlang

DeltaBlue: Fully optimizedaddConstraintsConsumingTo$2: function(v, coll) { var determining, t1, i, c; determining = v.determinedBy; for (t1 = v.constraints, i = 0; i < t1.length; ++i) { c = t1[i]; if (c !== determining && c.isSatisfied$0()) { coll.push(c); } }}

262 characters, samesemantics

Page 45: GDG DART Event at Karachi

#dartlang

Page 46: GDG DART Event at Karachi

#dartlang

Page 47: GDG DART Event at Karachi

#dartlang

Page 48: GDG DART Event at Karachi

#dartlang

Page 49: GDG DART Event at Karachi

#dartlang

Old 'n busted New hotness<messages> <message> <subject> Please fill out the TPS report </subject> <sent>2012-10-03</sent> <summary> I'm going to have to ask you to come in... </summary> </message> <message> <subject> Reminder: fill out that TPS report! </subject> <sent>2012-10-04</sent> <summary> It's been 24 hours... </summary> </message> ...</messages>

Page 50: GDG DART Event at Karachi

#dartlang

<custom-element>

Structure Behavior Styles

<div> <input> <p> <span></span> </p></div>

tag.verifyAccount();<style> p { color: red; }</style>

Encapsulated

Page 51: GDG DART Event at Karachi

#dartlang

Reusable

Custom Element

HTML Page

import import import

HTML Page HTML Page

Page 52: GDG DART Event at Karachi

#dartlang

Data binding

Data model DOM Nodes

Data model DOM Nodes

Page 53: GDG DART Event at Karachi

#dartlang

ShadowDOM

HTML Imports

<template>

Custom ElementsNew webspecifications

Future proof

Page 54: GDG DART Event at Karachi

#dartlang

Polymer.dart(today)

Using web components today

Page 55: GDG DART Event at Karachi

#dartlang

Custom elements everywhere!

<body> <persistable-db dbname="game" storename="sologames"></persistable-db> <game-assets></game-assets> <game-app></game-app> <google-signin clientId="250963735330.apps.googleusercontent.com" signInMsg="Please sign in"></google-signin>

Page 56: GDG DART Event at Karachi

#dartlang

Angular is ported to Dart!

Page 57: GDG DART Event at Karachi

#dartlang

<div my-controller> <div class="well"> <click-counter count="{{ctrl.count}}"></click-counter> </div> </div>

Angular and Polymer together

Polymer element

Angular controller

Page 58: GDG DART Event at Karachi

#dartlang

Dart in production

Page 59: GDG DART Event at Karachi

#dartlang

"Dart allows for quick prototyping as well as robust codethat is easy to refactor" - Soundtrap

Page 60: GDG DART Event at Karachi

#dartlang

"Dart's familiar language, and cohesive set of libraries,allowed the team to start building very quickly." - Montage

Page 61: GDG DART Event at Karachi

#dartlang

"Dart offers a sane and consistent development experience for modern web applications." - Blossom

Page 62: GDG DART Event at Karachi

#dartlang

"The source code for this game (Escape) is 20% smaller compared to theActionScript version (69.6 KB vs 86.5 KB). The port took only 6 hours." -- Author of StageXL

Page 63: GDG DART Event at Karachi

#dartlang#dartlang

Export Flash movies/games toDart from Flash Pro

Page 64: GDG DART Event at Karachi

#dartlang

"We rewrote Google's internal CRM app in 6 months, fromscratch, with Dart and Angular." - Internal team at Google

Page 65: GDG DART Event at Karachi

#dartlang

TC52 to standardize Dart language

Page 66: GDG DART Event at Karachi

#dartlang

Ready to get started? Write a Dart app!

dartlang.org/codelabs/darrrt/

Page 67: GDG DART Event at Karachi

#dartlang

Dart - for the modern web

• Platform you can use today

• Easy to get started - dartlang.org

• Compiles to JavaScript

Page 68: GDG DART Event at Karachi

#dartlang

Questions?