Professional Documents
Culture Documents
Qu es Dart?
Tabla de Contenidos
Qu es Dart?
Por qu Google cre Dart?
Puede la Web realmente necesitar otro lenguaje?
Mustrame el cdigo
Cmo puedo jugar con Dart?
Qu tal un editor Real?
Qu hay de nuevo con Dart?
Por qu Dart luce tan familiar?
Qu hay en la Plataforma de Dart?
Puedo usar Dart para mi Aplicacin Web hoy?
Cmo esperas que las personas usen Dart?
Cmo puedo compilar a JavaScript?
Qu libreras hay disponibles?
dart:core
dart:html
dart:io
Mustrame ms cdigo
Tipos
Generales
Manipulando el DOM
Aislamientos
Dnde puedo aprender ms?
Qu es Dart?
Mustrame el Cdigo
Suficiente charla, vamos a ver algo de cdigo. Si sabes JavaScript o Java, el cdigo
de Dart debera resultarte familiar. He aqu un ejemplo de una pagina web sencilla en Dart:
hola.dart
#import(dart:html)
main(){
document.query(#status).text=Hola,Dart
}
hola.html
...
<h2id=status></h2>
<scripttype=application/dartsrc=hola.dart></script>
<!
SielnavegadornotieneembebidalaVMdeDart,
tupuedescompilarelcdigodeDartaJavaScript.
>
<scripttype=text/javascriptsrc=hola.dart.js></script>
...
Ahora vamos a ver un poco del cdigo de Dart que usa funciones:
enviar(msj,destinatario,emisor,[rate=PrimeraClase]){
return$emisordice$msja$destinatariovia$rate
}
main()=>print(enviar(hola,German,Fer))
>GermandiceholaaFerviaPrimeraClase
El uso de => en la sintaxis implementado a main()esta bueno, es una manera
compacta de implementar una funcin que evale y retorne un expresin simple. Sin el
uso de =>, la implementacin del mtodo main()lucira de la siguiente manera:
main(){
print(enviar(hola,German,Fer))
}
En el mtodo enviar()implementado abajo, ratees un parmetro opcional con
un valor por defecto. Este mtodo muestra la interpolacin de String trabajando ($var).
Aqui un poco de cdigo Dart un poco ms orientado a objetos:
classPunto{
Punto(this.x,this.y)
distanciaA(otro){
vardx=xotro.x
vardy=yotro.y
returnMath.sqrt(dx*dx+dy*dy)
}
varx,y
}
main(){
varp=newPunto(2,3)
varq=newPunto(3,4)
print(Distanciadepaq=$p.distanciaA(q))
}
ste cdigo puede parecer un poco familiar si tu has usado un lenguaje basado en
clases con anterioridad.
Como todas las cosas relacionadas con Dart, Dartboard sigue cambiando. Para la
ltima informacin se recomienda ver el tutorial de Dartboard.
Para ejecutar cualquier programa en Dart Editor, solamente clickea el botn Run
mientras seleccionas algun item en esa galera de programas. Si tu programa es una
aplicacin web, Dart Editor presenta Dartium (Chromium con una Dart VM integrada) para
ejecutar el programa. Cuando ests listo para pasar del desarrollo a produccin Dart
Editor puede compilarlo a JavaScript haciendo que tu aplicacin sea accesible para toda
la web moderna.
Dart Editor tiene diversas caractersticas para ayudarte con el cdigo Dart, se
esperan ms caractersticas pronto. Como puedes ver en la captura de pantalla Dart
Editor resalta la sintaxis de Dart. Dart Editor tambin soporta autocompletado, y
rpidamente puede llevarte donde los tipos y otras APIs son declaradas. Tambin puedes
obtener una rpida descripcin de tus clases, mtodos y campos.
Puedes
ver
y
descargar
el
tutorial
de
Dart
Editor
aqu:
https://www.dartlang.org/codelabs/darrrt/
dart:core
sta es la librera principal que todas tus aplicaciones dart debe contener, se carga de
manera automtica por lo que no debemos especificar su importacin, ella nos permite el
uso diferentes caractersticas, tipos y funciones. Echemos un vistazo a algunos:
- Nmeros y booleanos.
- Strings y Expresiones Regulares.
- Collections.
- Fecha y Hora (Date y Time).
- Uri.
- Errores.
dart:html
Esta librera nos proporciona todas las herramientas para el manejo del DOM y la
interaccin con la UI. Por ejemplo:
- Obtener objetos globales (document, window).
- Encontrar elementos HTML (Elementos query() y queryAll() ).
- Agregar y quitar eventos ( Propiedad on de los elementos).
dart:io
Esta es una librera que trabaja del lado del Servidor y podemos utilizarla siempre que la
VM de Dart est corriendo sobre uno. Unos ejemplos de que podemos hacer:
- Leer y Escribir informacin (InputStream, OutputStream).
- Abrir y Leer Archivos (File, Directory)
- Conectar a Sockets en red (Socket).
Puedes ver la documentacin completa de cada una de stas libreras en api.darlang.org
La lista de libreras listadas en la documentacin es:
- dart:async (Nos provee el soporte para trabajar de manera asncrona).
- dart:collection
- dart:convert (Codifica y decodifica para convertir entre diferentes
representaciones de informacin, incluyendo JSON y UTF-8).
- dart:core
- dart:html
- dart:indexed_db
- dart:io
- dart:isolate
- dart:js
- dart:math
- dart:mirrors
- dart:svg
- dart:typed_data
- dart:web_audio
- dart:web_gl
- dart:web_sql
Mustrame ms cdigo
Se ha dado una informacin general sobre las ms interesantes caractersticas de
Dart, y se ha mostrado algo de cdigo Dart; ahora se elaborarn, en algunas de esas
caractersticas -- tipeos, genricos, aislaciones y manipulacin del DOM -- y se mostrar
an ms cdigo.
Tipos
Anteriormente se ha mostrado este ejemplo:
classPunto{
Punto(this.x,this.y)
distanciaA(otro){
vardx=xotro.x
vardy=yotro.y
returnMath.sqrt(dx*dx+dy*dy)
}
varx,y
}
main(){
varp=newPunto(2,3)
varq=newPunto(3,4)
print(Distanciadepaq=$p.distanciaA(q))
}
Quizs notes que el cdigo define y usa una clase, sta no tiene un tipo; stos son
opcionales en Dart, no modifican la manera en la que el programa se ejecuta, pero hacen
que el cdigo sea ms entendible por herramientas (como depuradores e IDEs) y
desarrolladores (como si fuera tu reemplazo cuando te vas a un proyecto mucho mejor).
Piensa a los tipos como anotaciones o documentacin que puede ayudar a herramientas
y humanos a entender tu intencin mejor y a detectar errores ms rpido.
Un buen lugar para empezar a agregar tipos es en los mtodos, las firmas e
interfaces -- el rea superficial de tu programa -- . Mientras ms personas sean adheridas
a tu proyecto, y ms clases sean generadas, ser til saber qu tipos son usados (y
devueltos) por mtodos.
classPunto{
Punto(this.x,this.y)
numdistanciaA(Puntootro){
vardx=xotro.x
vardy=yotro.y
returnMath.sqrt(dx*dx+dy*dy)
}
numx,y
}
main(){
varp=newPunto(2,3)
varq=newPunto(3,4)
print(Distanciadepaq=$p.distanciaA(q))
}
Genricos
Si tu nunca has usado tipos genricos antes -- o tal vez si -- ver algo como List<E>
en la documentacin de la API, puede resultar un poco aterrador. Pero no te preocupes,
los genricos en Dart son muy fciles.
Por ejemplo, si no te importa que tipos de objetos hay en la lista, entonces,
puedes crear una lista como esta:
newList()
Si sabes que tu lista slo tendr un tipo de objeto en ella -- slo restricciones, por
ejemplo -- entonces puedes (pero no necesariamente tienes que hacerlo) declararlo
cuando crees la Lista:
newList<String>()
Por qu molestarse con tanta ceremonia? Especificando qu tipos puede tener
tu coleccin, es una buena manera de dar conocimiento a tus colegas programadores, y a
tus herramientas que expectativas tienes. As las herramientas en tiempo de ejecucin
(runtime) pueden detectar errores ms rpidamente.
(Nota: newList()es la manera acortada para newList<Dynamic>(). Dynamic es el tipo
usado detras de escena para las variables definidas).
Aqu hay algunos ejemplos de como Dart adopta diferentes tipos y colecciones de
variables indefinidas. Si ests familiarizado con genricos en Java, presta mucha atencin
a los ltimos dos ejemplos.
main(){
print(newList()isList<Object>)
print(newList()isList<Dynamic>)
print(newList<String>()isList<Object>)
print(newList<Object>()is!List<String>)//NotodoslosobjetossonString
print(newList<String>()is!List<int>)//LosStringnosonint
print(newList<String>()isList)//TodaslaslistasdeStringson
//List
print(newList()isList<String>)//EscorrectopasardeunaLista
//unmtodo
//queesperaList<String>
}
Manipulando el DOM
Recorrer el DOM con Dart tiene muchas ventajas. Tu puedes usar elementos y
nodos con los objetos de Dart, puedes iterar a travs de nodos hijos de la misma manera
que lo haces con otras collections de Dart.
Por ejemplo, aqu hay un poco de cdigo para encontrar un elemento especfico y
entonces realizar algunas operaciones sobre l y su elemento hijo.
#importdart:html
main(){
//Encontrarelelemento.
varelemen=document.query(#id)
//Agregarleeventos.
elemen.on.click.add((event)=>print(click))
//Seteandounatributo.
elemen.attributes[name]=valor
//Agregarunelementohijo.
elemen.elements.add(newElement.tag(p))
//AgregarunaclasedeCSSalelementohijo.
elemen.elements.forEach((e)=>e.classes.add(important))
}
Aislaciones
A pesar de que Dart tiene un nico hilo de procesamiento, tu puedes tomar
ventaja de las mquinas multincleo usando aislaciones. Una aislacin provee memoria
individual entre diferentes partes de un programa en ejecucin. Cada aislacin puede
correr en un hilo separado de procesamiento, administrado por la Dart VM.
Las aislaciones se comunican mediante el envo de mensajes a travs de puertos.
Los mensajes son copiados de manera que una aislacin no puede modificar el estado de
Informacin de contacto:
Material Original:
Seth Ladd: www.google.com/+SethLadd
Kathy Walrath: www.google.com/+KathyWalrath
Traduccin y Actualizacin:
Germn Quirz Bogner: www.google.com/+GermanQuirozBogner