Acercádonos a Dart

39
Acercándonos a Dart Rafael Bermúdez @rafbermudez Fernando G. Pichel @fergpichel Madrid DUG http://www.meetup.com/madrid-dug

Transcript of Acercádonos a Dart

Acercándonos a Dart

Rafael Bermúdez@rafbermudez

Fernando G. Pichel@fergpichel

Madrid DUGhttp://www.meetup.com/madrid-dug

Madrid DUG Google Dart User Group¿Qué es Dart?

Es un lenguaje de programación desarrollado por Google en 2011

❖ Desarrollo Web❖ Open Source❖ Compatible con JS

Interpretado: Se ejecuta en su propia VM

❖ Estructurado❖ Flexible❖ Orientado a objetos

Madrid DUG Google Dart User Group¿En qué destaca?

❖ Legible❖ Estructurado❖ Fácil de mantener❖ Programación asíncrona❖ Rápido ❖ Modern Browser Compatible❖ Web Components Polymer.dart

Madrid DUG Google Dart User GroupPolymer.dart

Polymer es una implementación del estándar HTML Web Components, un estándar que quiere revolucionar la manera en la que se desarrollan aplicaciones web en los navegadores.

https://www.dartlang.org/docs/tutorials/polymer-intro

❖ Polymer custom elements❖ Diseñar HTML tags para

encapsular estilos, estructura y comportamientos

❖ Crear bindings bidireccionales entre Dart objects y DOM nodes

❖ Uso de Web Standars emergentes: custom elements, HTML Imports, Shadow DOM ....

Madrid DUG Google Dart User GroupDart Virtual Machine

Dartium: Chromium + Dart VMdart2js: compilación a Javascript

Dart VM puede ejecutarse en dos modos: checked o productionPor defecto arrancará en production. Se recomienda habilitar el modo checked para desarrollo y testing

dart --checked test.dart

Madrid DUG Google Dart User GroupVelocidad

Madrid DUG Google Dart User GroupVelocidad

Madrid DUG Google Dart User GroupVelocidad

Madrid DUG Google Dart User GroupVelocidad

Madrid DUG Google Dart User GroupVelocidad

Madrid DUG Google Dart User GroupLibrerías

Gestor de paquetes Pub https://pub.dartlang.org/

Herramienta que nos permite añadir librerías.

También incluye comandos para crear, desarrollar y desplegar

Se ocupa de resolver dependencias automáticamente

Madrid DUG Google Dart User Group¿Quién usa Dart?

https://www.dartlang.org/community/who-uses-dart.html

MANDRILL

Madrid DUG Google Dart User GroupTutoriales

❖ Avast, Ye Pirates: Write a Web AppCreación de una web app usando Dart Editor.

❖ A Tour of the Dart Language

❖ The Dart Tutorials➢ Varios tutoriales sobre instalación de paquetes, creación de DOM

elements, Polymer Custom Elements, Forms ...

Lenguaje Dart

Rafael Bermúdez@rafbermudez

Fernando G. Pichel@fergpichel

Madrid DUGhttp://www.meetup.com/madrid-dug

Madrid DUG Google Dart User Group¿Por dónde empezar?

❖ Buena comunidad❖ Buena bibliografía❖ Documentación oficial

➢ https://www.dartlang.org/docs/➢ Especificaciones del lenguaje

■ https://www.dartlang.org/docs/spec/index.html

Madrid DUG Google Dart User GroupOrientado a objetos

❖ Basado en clases❖ Herencia Simple❖ Lenguaje OO

➢ Todo es un objeto➢ Tipos primitivos => Son objetos➢ Object = root de la jerarquía de clases➢ El tipo de ejecución de cada objeto es una

instancia de la clase Type

Madrid DUG Google Dart User GroupConcurrencia

❖ Single threaded❖ Isolate

➢ Unidad de concurrencia➢ Tiene su propia memoria y control de thread➢ No hay estado compartido entre isolates➢ Se comunican entre ellos mediante paso de

mensajes

class Persona {

// Variables de instancia.

String nombre; // variable inicializa a null.

String apellidos; // variable inicializa a null.

num edad; // variable inicializa a null.

num hijos = 0; // variable inicializa a 0.

// Constructor.

Persona() {}

// Método que lanza un saludo de presentación

void presenta() => print('Hola me llamo $nombre');

}

Madrid DUG Google Dart User GroupClases

class Programador extends Persona implements DichoStarWars {

String lenguajeFavorito = “Dart”;

// Método que sobreescribe el saludo de presentación

@override

void presenta() => print('Hola mundo soy $nombre');

// Método que implementa el dichoStarWars de la interfaz

void dichoStarWars() => print("que la fuerza te acompañe");

}

Madrid DUG Google Dart User GroupHerencia e Interfaces

Madrid DUG Google Dart User GroupÁmbito (Contexto)

❖ Ámbito de una declaración

➢ Lexical scoping (o estático)➢ Lexical scoping tiene preferencia sobre inheritance

scope

Madrid DUG Google Dart User GroupPrivacidad

❖ 2 niveles de privacidad➢ Público / Privado

❖ Por defecto siempre se utiliza el modo público❖ Sintaxis del nivel privado

➢ Mejora la documentación del código

String nickname; // público

String _nombreReal; // privado

Madrid DUG Google Dart User GroupVariables

❖ Estáticas (Lazy) o dinámicas❖ Finales o mutables

➢ final => Se inicializa una vez➢ const =>

■ cte. en tiempo de ejecución■ implicitamente finales

Madrid DUG Google Dart User GroupTipos de datos

* Los tipos de datos primitivos también son objetos

String bool

num DateTime

int Set

double Map

Madrid DUG Google Dart User GroupOperadores

❖ Tipos de operador

Aritméticos Asignación

Test de tipado De Bits

Condicionales De igualdad y relacionales

❖ Operadores de test de tipado

numerito as num; // Casting de tipos

var IsNum = numerito is num; // Verdadero si el objeto es del tipo indicado

var IsNotNum= numerito is! num; // Falso si el objeto es del tipo indicado

Madrid DUG Google Dart User GroupOperadores II

void saludaMeetup(String nombreMeetup) {

print('Bienvenidos al meetup de ${nombreMeetup}');

}

Madrid DUG Google Dart User GroupFunciones

Madrid DUG Google Dart User GroupFunciones II

❖ Parám. opcionales por posiciónvoid saludaMeetup (String nombreMeetup, [String siglas, num miembros]) {...}

❖ Parám. opcionales por nombrevoid saludaMeetup ({String nombreMeetup, String siglas, num miembros}) {...}

❖ Valores predeterminadosvoid saludaMeetup ([String nombreMeetup = 'MadridDUG']) {...}

❖ Valores de retorno➢ return x➢ todas las funciones devuelven un valor de un tipo concreto.

Madrid DUG Google Dart User GroupLooping

❖ Bucle for❖ While y do while❖ Switch❖ *Control: break y continue❖ Iterables

lista.forEach((item){...});

for(item in lista) {...}

*Se puede iterar a través de list, map y set

var resultado;

try {

// Intento descifrar una contraseña

resultado = rompePassWord(password);

} on Exception catch(e) {

// Se produce un error al procesar el descifrado.

resultado = 'No se ha resuelto !';

} finally {

// Muestro la respuesta al usuario.

print(resultado);

}

Madrid DUG Google Dart User GroupExcepciones

Madrid DUG Google Dart User GroupExcepciones II

❖ dart:core => Exception y Error para el manejo❖ Permite crear tus propias excepciones❖ Mecanismos de manejo

➢ throw➢ on /catch➢ finally

❖ Si no se captura, el isolate se termina

❖ Análisis estático => Dart analyzer❖ Unit testing

void main() {

test('QuickSort', () =>

expect(quickSort([5, 4, 3, 2, 1]),

orderedEquals([1, 2, 3, 4, 5]))

);

* https://www.dartlang.org/docs/#testing

Madrid DUG Google Dart User GroupTesting

Madrid DUG Google Dart User GroupLibrerías

❖ Permiten crear código modular❖ Compartibles y reutilizables❖ Fichero librería

library mylibraryname;

❖ Fichero que la utiliza

import "path/to/mylibraryname.dart";

Madrid DUG Google Dart User GroupLibrerias II

❖ Algunas librerías interesantes

dart:async dart:indexed_db

dart:collection dart:io

dart:convert dart:isolate

dart:core dart:js

dart:html dart:math

Bonus

Rafael Bermúdez@rafbermudez

Fernando G. Pichel@fergpichel

Madrid DUGhttp://www.meetup.com/madrid-dug

❖ Compatible con HTML5❖ Simplifica la interacción❖ Manejo estructurado del DOM❖ Búsqueda de elementos

➢ querySelector() y querySelectorAll()➢ devuelven colecciones de datos nativas de Dart

❖ Constructores para elementos del DOM➢ new DivElement()

Madrid DUG Google Dart User GroupDart y el DOM

import 'dart:html';

void main() {

var text = document.querySelector('#sample_text_id');

text.text = 'Bienvenido a MadridDUG !';

text.lang = 'ES';

text.attributes.forEach((k, v) => print('$k: $v'));

text.style.backgroundColor = '#f87c45';

}

Madrid DUG Google Dart User GroupDart y el DOM II

Madrid DUG Google Dart User GroupFuture y Stream Apis

❖ Permite encapsular en una forma OO respuestas asíncronas de manera nativa

❖ Future Object, Promesa Object

// Futuros

void getResult() {

var xhr = HttpRequest.getString('http://www.google.es')

..then((resp) => print(resp))

..catchError((e) => print('Error!'));

}

❖ Dispone de funcionalidades para la creación de la documentación

❖ Metaprogramación❖ ...etc

Madrid DUG Google Dart User GroupY ... ¡mucho más!

Madrid DUG Google Dart User Group

Gracias!

Madrid DUGhttp://www.meetup.com/madrid-dug

Rafael Bermúdez@rafbermudez

Fernando G. Pichel@fergpichel