hello_world.dart
🔹 Tipos de Datos
Dart es fuertemente tipado, pero permite inferencia de tipos con var
y dynamic
.
var
infiere el tipo de dato al inicializar la variable y lo mantiene fijo.dynamic
permite cambiar el tipo de dato de la variable durante la ejecución.”
Strings
String saludo = "Hola, Dart!";var nombre = "John"; // Inferencia de tipoprint(saludo + " " + nombre);
Numbers
int entero = 42;double decimal = 3.14;num flexible = 100;print(entero + decimal); // 45.14
Booleans
bool esVerdadero = true;bool esFalso = false;
Null Safety
Dart maneja la seguridad contra null
usando ?
, !
y late
.
String? textoOpcional; // Puede ser nullString textoSeguro = textoOpcional ?? "Valor por defecto";String textoForzado = textoOpcional!; // Fallara si es null
Tipos de datos y operadores
int entero = 42;double decimal = 3.14;num flexible = 100; // Puede ser int o doublebool esVerdadero = true; // true | falseString texto = "Hola, Dart!";List<int> listaEnteros = [1, 2, 3, 4];Set<String> conjunto = {"A", "B", "C"};Map<String, dynamic> mapa = {"nombre": "John", "edad": 20};dynamic cualquierCosa = "Puedo cambiar de tipo";
Operadores aritméticos
Operador | Descripción | Ejemplo |
---|---|---|
+ | Suma | a + b |
- | Resta | a - b |
* | Multiplicación | a * b |
/ | División (devuelve double ) | a / b |
~/ | División entera (trunca decimales) | a ~/ b |
% | Módulo (resto de la división) | a % b |
++ | Incremento | a++ o ++a |
-- | Decremento | a-- o --a |
Operadores de asignación
Operador | Descripción | Ejemplo |
---|---|---|
= | Asignación | a = 5 |
+= | Suma y asigna | a += 2 (equivale a a = a + 2 ) |
-= | Resta y asigna | a -= 2 |
*= | Multiplica y asigna | a *= 2 |
/= | Divide y asigna | a /= 2 |
~/= | Divide entero y asigna | a ~/= 2 |
Operadores de comparación
Operador | Descripción | Ejemplo |
---|---|---|
== | Igualdad | a == b |
!= | Desigualdad | a != b |
> | Mayor que | a > b |
< | Menor que | a < b |
>= | Mayor o igual | a >= b |
<= | Menor o igual | a <= b |
Operadores lógicos
Operador | Descripción | Ejemplo |
---|---|---|
&& | AND lógico | a > 0 && b > 0 |
|| | OR lógico | a > 0 || b > 0 |
! | Negación lógica | !a |
Operadores bitwise (a nivel de bits)
Operador | Descripción | Ejemplo |
---|---|---|
& | AND bit a bit | a & b |
| | OR bit a bit | a | b |
^ | XOR bit a bit | a ^ b |
~ | Complemento bit a bit (NOT) | ~a |
<< | Desplazamiento a la izquierda | a << 2 |
>> | Desplazamiento a la derecha | a >> 2 |
Operadores de tipo
Operador | Descripción | Ejemplo |
---|---|---|
is | Verifica tipo de dato | a is String |
is! | Verifica que NO sea tipo | a is! int |
as | Convierte tipo (cast) | b as double |
Operadores de control de nulos
Operador | Descripción | Ejemplo |
---|---|---|
?? | Devuelve el primer valor no nulo | a ?? b |
??= | Asigna solo si es null | a ??= 5 |
?. | Accede si no es null | a?.longitud |
// OPERACIONESint a = 30;print("Operaciones:");print("a = $a");print("a++ = ${a++}"); // Imprime 30, luego a es 31print("a = $a"); // Ahora es 31print("++a = ${++a}"); // Incrementa antes de imprimir, ahora es 32print("a-- = ${a--}"); // Imprime 32, luego a es 31print("--a = ${--a}\n"); // Decrementa antes de imprimir, ahora es 30
// OPERADORES ARITMÉTICOSint x = 10, y = 3;print("Suma: ${x + y}");print("Resta: ${x - y}");print("Multiplicación: ${x * y}");print("División: ${x / y}"); // Devuelve doubleprint("División Entera: ${x ~/ y}");print("Módulo: ${x % y}\n");
// OPERADORES LÓGICOSbool p = true, q = false;print("AND (&&): ${p && q}"); // falseprint("OR (||): ${p || q}"); // trueprint("NOT (!): ${!p}\n"); // false
// OPERADORES BITWISEint b = 5, c = 2; // 5 = 0b0101, 2 = 0b0010print("Bitwise AND: ${b & c}"); // 0 = 0b0000print("Bitwise OR: ${b | c}"); // 7 = 0b0111print("Bitwise XOR: ${b ^ c}"); // 7 = 0b0111 (bits diferentes resultan en 1)print("Bitwise NOT: ${~b}"); // -6 (en complemento a dos, ~x es -x - 1)print("Desplazamiento Izquierda: ${b << 1}"); // 10 = 0b1010print("Desplazamiento Derecha: ${b >> 1}"); // 2 = 0b0010
🔹 Estructuras de Control
Condicionales
if (edad >= 18) { print("Mayor de edad");} else { print("Menor de edad");}
Switch
int opcion = 2;switch (opcion) { case 1: print("Opción 1"); break; case 2: print("Opción 2"); break; default: print("Opción no válida");}
otros ejemplos de switch
var result = switch (option) { 1 => "uno", 2 => "dos", 3 => "tres", _ => "otro",};print(result);
result = switch (option) { 1 => () { print("Opción 1!"); return "uno"; }(), 2 => () { print("Opción 2!"); return "dos"; }(), 3 => () { print("Opción 3!"); return "tres"; }(), _ => () { print("Opción no válida!"); return "otro"; }(),};print(result);
🔹 Funciones en Dart
void saludo() { print("Hola desde una función!");}
int suma(int a, int b) => a + b;
saludo();print(suma(3, 5));
Parámetros opcionales
void saludar(String nombre, [String? apellido]) { print("Hola, $nombre ${apellido ?? ''}");}
// Función con parámetros opcionales con valor por defectovoid saludar(String nombre, [String apellido = "Desconocido"]) { print("Hola, $nombre $apellido");}
Funciones de orden superior
void ejecutar(Function funcion) { funcion();}
ejecutar(() => print("Ejecutando función anónima"));
🔹 Colecciones (Listas, Sets y Mapas)
Listas
var lista = ["Dart", "Flutter", "Web"];lista.add("Mobile");print(lista);
Sets (Colecciones sin duplicados)
var conjunto = {"Dart", "Flutter", "Dart"};print(conjunto); // {Dart, Flutter}
Mapas (Diccionarios clave-valor)
var mapa = { "nombre": "Carlos", "edad": 25};print(mapa["nombre"]);
🔹 Bucles en Dart
For-i
for (var i = 0; i < lista.length; i++) { print(lista[i]);}
For-in
for (var item in lista) { print("📝 $item");}
While y Do-While
int contador = 0;while (contador < 3) { print("Iteración $contador"); contador++;}
do { print("Iteración $contador"); contador++;} while (contador < 6);
🔹 OOP
class Persona { String nombre; int edad;
Persona(this.nombre, this.edad);
void presentarse() { print("Hola, soy $nombre y tengo $edad años."); }}
Persona p = Persona("Carlos", 30);p.presentarse();
🔹 Enumeraciones
enum Lenguajes { dart, kotlin, swift }var lenguaje = Lenguajes.dart;print("Lenguaje seleccionado: $lenguaje");
🔹 Manejo de Excepciones
try { int resultado = 10 ~/ 0;} catch (e) { print("❌ Error: $e");} finally { print("Este bloque siempre se ejecuta");}
🔹 Programación Asíncrona en Dart
Future<void> obtenerDatos() async { print("⌛ Cargando datos..."); await Future.delayed(Duration(seconds: 2)); print("✅ Datos cargados");}
🔹 Mixins
mixin Caminante { void caminar() => print("Estoy caminando...");}
class Persona with Caminante {}
Persona p = Persona();p.caminar();
🔹 Extensiones en Dart
extension StringExtension on String { String enMayusculas() => this.toUpperCase();}
print("dart".enMayusculas()); // "DART"
Hello, dart! 🚀