Conceptos esencilaes
Dart es un lenguaje orientado a objetos donde todo elemento es una instancia de clase, incluyendo números, funciones y null. Todos los objetos heredan de la clase base Object.
- Tipado fuerte con inferencia automática (ej:
var contador = 5infiere int) - Soporte para genéricos:
Lista<int>,Mapa<String, dynamic> - Funciones de nivel superior (main), métodos de clase y funciones anidadas
- Variables públicas por defecto; privadas con prefijo _ (ej:
_privado) - Identificadores: letras o _ seguidos de caracteres alfanuméricos
Manejo de variables
<code>// Declaración con inferencia
var usuario = 'María';
// Tipo explícito
String ciudad = 'Madrid';
// Tipo dinámico
dynamic objeto = 'Texto mutable';</code>
Valores predeterminados
<code>int valor;
assert(valor == null); // Variables no inicializadas son null</code>
Inmutabilidad
<code>final PI = 3.1416;
final double gravedad = 9.8;
const VELOCIDAD_LUZ = 299792458;
const VELOCIDAD_SONIDO = VELOCIDAD_LUZ / 881000;</code>
Tipos básicos
Números
<code>int entero = 42;
double decimal = 3.1416;</code>
Cadenas
<code>String s1 = 'Comillas simples';
String s2 = "Interpolación: ${entero * 2}";</code>
Booleaons
<code>bool activo = true;
assert(!activo);</code>
Colecciones
Listas
<code>var elementos = [10, 20, 30];
elementos[1] = 25;</code>
Mapas
<code>var colores = {
'rojo': '#FF0000',
'verde': '#00FF00',
500: 'azul'
};</code>
Unicode
<code>var emoji = '\u{1F600}';
print(emoji.runes.toList()); // [128512]</code>
Funciones
<code>// Declaración estándar
int sumar(int a, int b) {
return a + b;
}
// Sintaxis abreviada
int multiplicar(int x, int y) => x * y;
// Función como parámetro
[1, 2, 3].forEach((item) => print(item));</code>
Función principal
<code>void main() {
print('Inicio del programa');
}</code>
Control de flujo
<code>// Condicional
if (llueve) {
usarParaguas();
} else {
salir();
}
// Iteración
for (var i = 0; i < 5; i++) {
repetir();
}
// Switch
switch (estado) {
case 'activo':
ejecutar();
break;
default:
pausar();
}</code>
Programación orientada a objetos
Clases básicas
<code>class Vector {
num x, y;
Vector(this.x, this.y);
num magnitud() => sqrt(x*x + y*y);
}</code>
Herencia
<code>class Vector3D extends Vector {
num z;
Vector3D(super.x, super.y, this.z);
}</code>
Clases abstractas
<code>abstract class Figura {
void dibujar();
}
class Circulo implements Figura {
void dibujar() { /* implementación */ }
}</code>
Miembros estáticos
<code>class Matematica {
static const PI = 3.1416;
static double circuloArea(double r) => PI * r * r;
}</code>
Genéricos
<code>class Caja<T> {
T contenido;
Caja(this.contenido);
}
Caja<String> cajaTexto = Caja('Dart');</code>
Manejo asíncrono
<code>// Futuros
Future<String> obtenerDatos() async {
var datos = await http.get('https://api.com');
return procesar(datos);
}
// Streams
Stream<int> contarHasta(int max) async* {
for (int i = 1; i <= max; i++) {
yield i;
await Future.delayed(Duration(seconds: 1));
}
}</code>