Está en la página 1de 7

ssssssss

Dart sssssssssssssssssssssssssss
ssssssssssssssss
ssssssss
ssssssss
Guia de atajos
Interpolación de Strings Pero se puede especi car de manera manual
String Resultado final aListOfInts = <int>[];
final aSetOfInts = <int>{};
'${3 + 2}' '5' final aMapOfIntToDouble = <int, double>{};

${"word".toUpperCase()}' 'WORD'
El valor de También aplica si aplicamos un lista de una clase base,
'$myObject' los valores internos pueden ser de subclases.
myObject.toString()
final aListOfBaseType =
<BaseType>[SubType(), SubType()];
Variables con posibilidad nula:
int a = null; // NO-Valido en null-safe Dart.
int? a = null; // Valido en null-safe Dart. Sintaxis de Flecha
Es básicamente una función que inmediatamente
int? a; // El valor inicial de a es NULL.
retorna un valor.

/// Función normal


Operadores de valores nulos bool hasEmpty =
int? a; // = null aListOfStrings.any((s) {
a ??= 3; return s.isEmpty;
});
print(a); // <-- Imprime 3
/// Función de flecha
a ??= 5; bool hasEmpty =
print(a); // <-- Aún imprime 3 aListOfStrings.any((s) => s.isEmpty);

print(1 ?? 3); // <-- Imprime 1.


print(null ?? 12); // <-- Imprime 12. Cascades
/// Sin cascadas
Acceso a propiedades opcionales myObject.someMethod();
myObject.someOtherMethod();
myObject?.someProperty
/// Con cascadas
// Con ternario myObject
(myObject != null)
..someMethod()
? myObject.someProperty
: null; ..someOtherMethod()

myObject?.someProperty?.someMethod(); /// Se puede con propiedades


var button = querySelector('#confirm');
button?.text = 'Confirm';
button?.classes.add('important');
Tipos de colecciones button?.onClick.listen((e) =>
Inferir tipo de forma automática window.alert('Confirmed!'));
button?.scrollIntoView();
final aListOfStrings = ['one', 'two', 'three'];
final aSetOfStrings = {'one', 'two', 'three'};
querySelector('#confirm')
final aMapOfStringsToInts = {
?..text = 'Confirm'
'one': 1,
..classes.add('important')
'two': 2,
..onClick.listen((e) =>
'three': 3,
window.alert('Confirmed!'))
};
..scrollIntoView();

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
ssssssss
Dart sssssssssssssssssssssssssss ssssssss
ssssssss
ssssssssssssssss
Guia de atajos
Getters y Setters Parámetros con nombre
Los parámetros con nombre son siempre opcionales a
Los guiones bajos en Dart, son indicadores de menos que estén marcados con la palabra reservada
métodos y propiedades privadas de clase y módulo. required
class MyClass { void printName(
int _aProperty = 0; String firstName, String lastName,
{String? middleName }) {
int get aProperty => _aProperty;
print('$firstName ${middleName ?? ''} $lastName');
set aProperty(int value) { }
if (value >= 0) {
// ···
_aProperty = value;
printName('Dash', 'Dartisan');
} printName('John', 'Smith', middleName: 'Who');
}
} // Los parámetros con nombre pueden ser
colocados en cualquier parte
También se puede usar los getters para de nir una printName('John', middleName: 'Who', 'Smith');
propiedad computada.
class MyClass {
final List<int> _values = []; Si un valor opcional quiere ser manejado sin
operadores de valores nulos, se puede establecer un
void addValue(int value) { valor por defecto
_values.add(value); void printName({
} String middleName = ''}) {
print('$middleName');
// A computed property.
int get count { }
return _values.length;
}
} Excepciones
throw Exception(‘OOOPS!!!.’);
throw 'Waaaaaaah!';
Funciones, métodos y argumentos
Obligatorios
Se puede usar try, on y catch para manejarlas
int sumUp(int a, int b, int c) {
try {
return a + b + c;
breedMoreLlamas();
} } on OutOfLlamasException {
// Una excepción específica
// ··· buyMoreLlamas();
int total = sumUp(1, 2, 3); } on Exception catch (e) {
// Cualquier excepción
print('Unknown exception: $e');
Opcionales } catch (e) {
int sumUpToFive( // No especificado, maneja cualquiera
int a, [int? b, int? c, int? d, int? e] print('Something really unknown: $e’);
) { }
int sum = a;
if (b != null) sum += b;
if (c != null) sum += c; Si no se puede manejar en su totalidad, se puede
if (d != null) sum += d; propagar la excepción al padre
if (e != null) sum += e; try {
return sum; breedMoreLlamas();
} } catch (e) {
// ···
print('I was just trying to breed llamas!');
int total = sumUpToFive(1, 2);
rethrow;
int otherTotal = sumUpToFive(1, 2, 3, 4, 5);
}

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
ssssssss
Dart sssssssssssssssssssssssssss ssssssss
ssssssss
ssssssssssssssss
Guia de atajos
Después de ejecutar un try, catch, u on, si está Adicionalmente que se pueden colocar aserciones y
especi cado el nally, se ejecutará. reglas para que en desarrollo se cumplan las normas
try { establecidas.
breedMoreLlamas(); NonNegativePoint(this.x, this.y)
} catch (e) { : assert(x >= 0),
// ... manejar la excepción ... assert(y >= 0) {
} finally { print(‘Punto no negativo: ($x, $y)');
}
// Siempre hacer una limpieza si lo amerita
cleanLlamaStalls();
} Constructores con nombre
Esto permite a las clases tener múltiples constructores.
class Point {
Operador this double x, y;
Usar el operador this en Dart, en muchos lugares es
Point(this.x, this.y);
opcional y en otros obligatorio, la mejor forma de
dominar esto es practicando.
Point.origin()
: x = 0,
En el constructor para asignación de propiedades
y = 0;
class MyColor { }
int red; ...
int green;
int blue;
final myPoint = Point.origin();

MyColor(this.red, this.green, this.blue); Constructores Factory


}
class Square extends Shape {}
final color = MyColor(80, 80, 128);
class Circle extends Shape {}

class Shape {
Esta técnica también funciona para parámetros con
Shape();
nombre, propiedades se vuelven los nombres de los
parámetros. factory Shape.fromTypeName(String typeName) {
class MyColor { if (typeName == 'square') return Square();
... if (typeName == 'circle') return Circle();

MyColor({ throw ArgumentError('Unrecognized


required this.red, $typeName');
required this.green, }
required this.blue }
});
} Redireccionando constructores
A veces, el único propósito del constructor es
final color = MyColor(
redireccionar a otro constructor
red: 80, green: 80, blue: 80
); class Automobile {
String make;
String model;
int mpg;

Listas de inicialización // Constructor principal de la clase


Automobile(this.make, this.model, this.mpg);
Point.fromJson(Map<String, double> json)
: x = json['x']!, // Delega al constructor principal
y = json['y']! { Automobile.hybrid(String make, String model) :
print('In Point.fromJson(): ($x, $y)'); this(make, model, 60);
} // Deleta al constructor con nombre
Automobile.fancyHybrid() : this.hybrid('Futurecar',
'Mark 2');
}

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
fi
ssssssss
Dart sssssssssssssssssssssssssss ssssssss
ssssssss
ssssssssssssssss
Guia de atajos
Constructores constantes Sets
Si la clase produce objetos que nunca cambiarán, Un set es una colección no ordenada de elementos
puedes crear esos objetos como constantes de tiempo únicos.
de compilación y asegurarte que todas las instancias
serán nales ( nals). var halogens = {'fluorine',
'chlorine', 'bromine', 'iodine',
'astatine'};
class ImmutablePoint {
static const ImmutablePoint origin =
Set<String> halogens = {'fluorine',
ImmutablePoint(0, 0);
'chlorine', 'bromine', 'iodine',
final int x; 'astatine'};
final int y;
var names = <String>{};
const ImmutablePoint(this.x, this.y);
} Métodos comunes de los Sets
var elements = <String>{};
elements.add('fluorine');
Estructuras de Colecciones elements.addAll(halogens);
elements.length; // 5 (ya existía)
Listas
Es una colección de objetos con un largo e indice final constantSet = const {
final listOfNumbers = [1, 2, 3]; 'fluorine',
final vehicles = [ 'chlorine',
'Car', 'bromine',
‘Boat', 'iodine',
'Plane', 'astatine',
]; };
// constantSet.add('helium');
var constantList = const [1, 2, 3]; // Error, porque es constante
// constantList[1] = 1;
// Esa línea dará error porque es constante
Maps
Operador spread ( … ) Es un objeto que asocia pares de valores, (key-value
final list = [1, 2, 3]; pairs), las llaves y valores pueden ser de cualquier tipo
de dato.
final list2 = [0, ...list];
// 0,1,2,3 var gifts = {
Spread con null-aware operator ( …? ), en caso // Key: Value
de que la lista pueda ser nula 'first': 'partridge',
final list2 = [0, ...?list];
'second': 'turtledoves',
'fifth': 'golden rings'
};
En Dart es posible colocar if y for dentro de la creación
de la lista.
var nav = ['Home', 'Furniture', var nobleGases = {
'Plants', if (promoActive) 'Outlet']; 2: 'helium',
10: 'neon',
var listOfInts = [1, 2, 3]; 18: 'argon',
var listOfStrings = [
'#0', for (var i in listOfInts) };
‘#$i'
];

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
fi
Dart
ssssssss
sssssssssssssssssssssssssss ssssssss
ssssssss
Guia de atajos ssssssssssssssss

Puedes usar el constructor de mapas y


genéricos para establecer su apariencia.
Operadores
var gifts = Map<String, String>(); Descripción Operador Asociatividad

gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves'; Post jo
unitario
expr++ expr--
[] . ?. !
() [] ?
None
gifts['fifth'] = 'golden rings';
-expr !expr ~expr +
var nobleGases = Map<int, String>(); Pre jo unitario None
+expr --expr await expr
nobleGases[2] = 'helium';
nobleGases[10] = 'neon'; Multiplicativo * / % ~/ Left
nobleGases[18] = 'argon';

Determinar el largo del map Aditivo + - Left

var gifts = {'first': 'partridge'};


Shift << >> >>> Left
gifts['fourth'] = 'calling birds';
gifts.length; // 2
bitwise AND & Left

final constantMap = const { bitwise XOR ^ Left


10: 'neon',
18: 'argon', bitwise OR | Left
};
Relacional y >= > <= < as is is! None
tipo de dato
// constantMap[2] = 'Helium';
// Error debido a que es constante
Equidad == != None

AND Lógico && Left

Iterable
La diferencia con una lista, es que con el iterable, tu no OR Lógico || Left

puedes garantizar que leer elementos con indice será


e ciente if null ?? Left

Iterable<int> iterable = [1, 2, 3];


conditional expr1 ? expr2 : expr3 Right
iterable[1]; // NO HACER
cascade .. ?.. Left
// Usar esto
int value = iterable.elementAt(1); assignment = *= /= += -= &= ^= etc. Right

Los iterables tienen su propio set de métodos que


permiten barrer y controlarlo. Programación Asíncrona
Principalmente cuando hablamos de programación
String element = asíncrona estaremos nos referiremos a funciones,
iterable.firstWhere( métodos u objetos que retornan Futures y Streams.
(element) => element.length > 5 (Ver glosario sobre esos dos términos)
);
Tareas comunes asíncronas
• Leer data sobre internet.
• Escribir sobre base de datos.
• Leer y/o escribir un archivo.

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
fi
fi
ssssssss
Dart sssssssssssssssssssssssssss ssssssss
ssssssss
ssssssssssssssss
Guia de atajos
Estados del Future: • Los Streams proporcionan una forma de responder
a los errores.
Estado Descripción • Hay dos tipos de transmisiones:
• Suscripción única
Ejecutando el Future y
Uncompleted • Broadcast (múltiples listeners)
esperando un resultado.
El resultado del Future fue
Completed
exitoso. Async* y Yield
Así como el async, transforma una función o método
Donde el value, es el valor
en una función asíncrona que regresa un Future, el
Completing with especi cado por el Future, si
async* transforma el retorno a un stream, y en lugar
a value no hay nada de nido, será
de un return, se usa yield para emitir un valor del
dynamic.
Stream. (El await puede ser usado dentro de async*)
Completing El Futuro falló, y es disparada
Stream<String> lines(Stream<String> source)
with an error la clausula catch
async* {
var partial = '';
Si el Future es exitoso, se ejecuta el THEN y si falla, el // Esperar el resultado del Stream Source
CATCH es disparado. await for (final chunk in source) {
// Añadir valores a quien escuche el stream
myFunc() yield line;
.then(processValue) }
.catchError(handleError); }
// Añadir una última emisión
if (partial.isNotEmpty) yield partial;

Async - Await }

La palabra async es usada para transformar una


función o método en un Future, en pocas palabras es
una forma corta de convertir la función tradicional en Stream transformations
una función asíncrona. Son métodos que ya vienen incluídos en los streams y
permiten transformar las emisiones.
void main() async { ··· }
Las transformaciones más comunes son:
// Equivalente a: map(), where(), expand(), y take()
Future<void> main() async { ··· }
var counterStream =
Stream<int>.periodic(
La palabra await, es usada para esperar el resultado const Duration(seconds: 1),
de un Future como si fuera una tarea síncrona. (x) => x)
.take(15);
print(await createOrderMessage());
Otros ejemplos:
La palabra await siempre debe de ser usada dentro de
funciones asíncronas, si no, no podrá ser usada. // Filtrar emisiones
.where((int x) => x.isEven)
Future<String> createOrderMessage() async {
var order = await fetchUserOrder();
// Duplicar cada emisión
return 'Your order is: $order';
}
.expand((var x) => [x, x])

// Se detiene a las 5 emisiones


.take(5)
Streams
• Los Streams proporcionan una secuencia
asíncrona de datos.
• Las secuencias de datos incluyen eventos Más sobre Futures y Streams:
generados por el usuario y lectura de datos de Programación asíncrona, futures, async, await - Dart.dev
archivos. Creando Streams - Dart.dev
• Puede procesar una transmisión usando await o
listen( ) desde el Stream API.

Dart getting started docs Cursos y cupones en fernando-herrera.com


fi
fi
Dart sssssssssssssssssssssssssss
sssssssss
sssssssss
ssssssssssssssss sssssssss
Guia de atajos
Glosario de términos Streams
Los streams pueden ser retornados y usados como
objetos, funciones o métodos, son un ujo de
Null-Safe información que puede estar emitiendo valores
periódicamente, una única vez, o nunca.
Es un estándar hoy en día que se use la versión de
Dart que ayuda a determinar si una variable puede ser Un Stream podría verse como una manguera
nula o no. conectada a un tubo de agua, cuando abres el tubo el
agua uye, cada gota de agua sería una emisión del
Sound Null Safety - Null Safety Stream, la manguera puede nunca cerrarse, cerrarse o
Esto es una combinación entre Flutter y Dart, que dice nunca abrirse.
que tu aplicación tiene la veri cación de nulos
activada. Librería - Library
Le permiten dividir algún fragmento de código o
Const - Constantes módulo en varios archivos y compartirlos con otros
Es un espacio en memoria que aloja un valor que no desarrolladores.
cambiará desde su momento de compilación (Build
time de la aplicación nal) Otro bene cio de las bibliotecas, además de la
estructuración del código, es que permiten la
encapsulación de bibliotecas (determinar qué es
Final - Variables nales visible o no para otras bibliotecas). Ejemplo:
Se asigna un valor (en tiempo de ejecución), y ese
valor no cambiará desde esa primera asignación; import 'dart:math' show Point;

Late - Inicialización tardía Paquetes - Packages


Es conocido como inicialización tardía, en otras
Cada proyecto Dart tiene un paquete Dart
palabras, late permite decirle a Dart que esa variable
correspondiente.
tendrá un valor al momento de usarse, es
responsabilidad del desarrollador asegurar que eso se
El principal bene cio de trabajar con paquetes es que
cumpla.
el código que contienen se puede reutilizar y
compartir. El envío y extracción de dependencias al
Void sitio web pub.dartlang.org y al repositorio se realiza
Void es una palabra reservada para indicar que el mediante la herramienta pub.
método o función no retornará ningún valor, cualquier
intento de retorno marcará error. En Dart, hay dos tipos de packages: Application
Packages y Library Packages.
Iterable
Es una colección de elementos que se puede leer de PUB
manera secuencial. Pub es el administrador de paquetes para el lenguaje
Es un objeto que puede contar elementos que se de programación Dart, que contiene bibliotecas y
encuentren dentro de él, como listas, sets, arreglos, paquetes reutilizables para Flutter y programas
etc. generales de Dart.

Future Dart
Un Future representa principalmente el resultado de Dart es un lenguaje de programación de desarrollo
una operación asíncrona. Es una promesa de que optimizado para el cliente, de código abierto y
pronto tendrás un valor. La promesa puede falla y hay orientado a objetos. Tiene sintaxis de estilo C. Se
que manejar la excepción. Los futures son un acuerdo utiliza para crear una interfaz de usuario atractiva para
de que en el futuro tendrás un valor para ser usado. dispositivos móviles y la web. Es la base de Flutter.

Dart getting started docs Cursos y cupones en fernando-herrera.com


sssaarlhsBbsb
fl
fi
fi
fi
fi
fi
fl

También podría gustarte