Saltearse al contenido

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 tipo
print(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 null
String 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 double
bool esVerdadero = true; // true | false
String 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";

🔹 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 defecto
void 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! 🚀