Dart es un lenguaje liberado por Google, es orientado a objetos, de hecho todo es un objeto. Dart se hizo originalmente para correr bajo su propia máquina virtual. Actualmente, provee herramienta para traducir a código nativo (binario para diversas plataformas) y funciona en el navegador compilando (o transpilando) el código a Javascript (siendo uno de los más maduros en esta labor). Ultimamente se viene incentivando más con el marco de trabajo de Google denominado Flutter, enfocado en el desarrollo para aplicaciones móbiles bajo Android e iOS, incluso Web. Se puede encontrar que Dart tiene varias características influenciadas por lenguajes como C++, Java y Javascript. Su lema es “Dart is a client-optimized language for fast apps on any platform” (Dart es un lenguaje de cliente optimizado para aplicaciones rápidas en cualquier plataforma), es decir, aunque también puede funcionar del lado del servidor (backend) lo promueven como lenguaje optimizado para la UI.
Esta es una referencia ágil para quién tenga nociones de programación o codifique con algún otro lenguaje, también a modo de repaso y uso frecuente. Siendo así, tener esta información como memoria te resultará simple de acceder a los fundamentos, incluso como prueba de concepto sobre el lenguaje.
Para quien tenga habilidades, experticia en programación y/o requiera agilidad en conceptos técnicos, pueden resumirse los siguientes tips esenciales del lenguaje:
int
, double
, bool
, String
, List
, dynamic
(para cualquier tipo). Las variables se definen iniciando con el tipo de datos y luego el nombre (semejante a C++
y Java
). También se puede usar var
para cualquier tipo de modo dinámico.void
si no retorna valor), luego los parámetros van entre paréntesis (...)
iniciando también con el tipo de datos (y separando los parámetros con coma ,
). Además, se usa return
para retornar un valor. La función principal de un programa se denomina main
.{}
. Las sentencias deben terminar siempre con punto y coma ;
(semejante a C++
y Java
).C
, Java
, Javascript
, Kotlin
, es decir que se cuenta con una anatomía cercana para el uso de if
, for
, while
, incluso para el manejo de excepciones (try
).class
(semejante a C++
).kotlin
o versiones actuales de Javascript
, se cuenta con operador de nulo seguro (null-safe): ?.
Javascript
y Typescript
, el uso de JSON en Dart
es tan sencillo como en Python
, comprendiendo que no es un tipo o estructura natural del lenguaje. Se usa jsonEncode()
para serializar un objeto y luego el objeto puede usar el método .toJson()
para devolver una representación en JSON
.void main() {
print('Hi there!');
}
main
es la función principal de una aplicación o programa con Dart, semejante a otros lenguajes.
Dart promueve menos tipos de datos que otros lenguajes o una orientación más simple (comparado con Java o Rust).
Se puede declarar variables con la palabra reservada var
(indicando que el tipo de datos puede variar) o con el tipo de datos previo al nombre.
Ejemplo:
var variable = 'Ana';
String name = 'Ana';
int n = 0;
List<dynamic> list = [1, 2.3, 'Hi'];
Para las variables definidas con
var
se puede identificar el tipo usando el nombre y.runtimeType
.
En la última línea que corresponde a una lista, se usa<dynamic>
sólo si contiene diferentes tipos de datos, por tantoList
en su modo simplificado sólo permite un tipo de datos.
Las funciones se definen comenzando con el tipo de datos que retornan, o void
en caso de no retornar un tipo. Al final se usa la palabra reservada return
para devolver el valor respectivo, salvo que se defina con void
cuando no retorna valor.
int plus(a, b) {
return a + b;
}
Los parametros opcionales se encierran entre corchetes
[]
. También se pueden usar parámetros nombrados definiendo la función con todos lo parámetros entre llaves({...})
, pero debe recordarse que la función se invoca con el nombre de los parámetros y sus valores separados por el signo:
.
Adicionalmente, si la función se reduce a una sóla línea, se pueden usar funciones de flecha, por ejemplo:
int plus2(a, b) => a + b;
Nótese que se evita el uso de llaves
{}
y la palabra reservadareturn
.
if (i == 1) {
print('one');
}
else if (i == 2) {
print('two');
}
else {
print('aha');
};
for (int i = 0; i < 5; i++) {
print(i);
}
while (i < 10) {
i++;
}
do {
i++;
}
while (i < 10);
try {
...
}
on Exception1 {
...
}
catch Exception2 {
...
}
finally {
...
}
Puedes usar
throw
(por ejemplo:throw new Exception();
) para forzar el lanzamiento de un error.
La programación orientada a objetos (OOP) tiene su propia base de conceptos que abre un capítulo aparte para su comprensión, se puede decir que se pasa de pensar en funciones a clases que agrupan métodos (funciones) y propiedades (variables), siendo de gran útilidad para la reutilización de código. Como referencia simplemente se presenta la anatomía de una clase.
class Shape {
int sides;
Shape(String name, int sides) {
this.sides = sides;
}
}
void main() {
Shape x = Shape('frame', 4);
}
Nótese que el constructor de la clase lleva el mismo nombre de la clase.
Veamos ahora como lograr un servidor web en simples pasos con Angel Framework
. Primero configuramos el archivo pubspec.yaml
así:
name: hello_angel
dependencies:
angel_framework: ^2.0.0
environment:
sdk: '>=2.10.0 <3.0.0'
Ejecutamos:
pub get
Abrimos el editor y nombramos nuestro programa, por ejemplo server.dart
, y colocamos el siguiente contenido:
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart';
main() async {
var app = Angel();
var http = AngelHttp(app);
await http.startServer('localhost', 8000);
}
Ejecutamos el programa con el comando:
dart server.dart
Puedes revisar en un navegador consultando la dirección:
localhost:8000
2021 by César Arcila