¿Cuáles son los tipos de datos básicos de Dart y qué diferencia hay entre `dynamic`, `Object` y `var`?
Ver respuesta — intenta responderla en voz alta primero
Los tipos básicos son int, double, num, String, bool, List, Set, Map y los símbolos Runes. int y double son subtipos de num. La diferencia clave: var infiere un tipo fijo al compilar, Object acepta cualquier valor pero solo expone métodos de Object, y dynamic desactiva la verificación de tipos (peligroso).
Dart es un lenguaje fuertemente tipado con inferencia. Sus tipos numéricos:
int: enteros (sin decimales).double: números con decimales.num: el "padre" deintydouble. Sirve cuando puede ser cualquiera de los dos.
Otros tipos comunes: String (texto), bool (true/false), List (arreglos), Set (elementos únicos) y Map (clave-valor).
Las tres formas de "no comprometerte con un tipo":
var: NO es un tipo. Es inferencia: Dart deduce el tipo al compilar y a partir de ahí lo fija.var x = 5;hacexde tipointpara siempre.Object(uObject?): acepta cualquier valor, pero solo puedes usar métodos que existan enObject(comotoString()). El compilador te obliga a verificar el tipo antes de usarlo como algo específico.dynamic: apaga la verificación de tipos. Puedes llamar cualquier método y el error, si lo hay, explota en tiempo de ejecución. Úsalo lo menos posible.
void main() {
int entero = 42;
double decimal = 3.14;
num cualquiera = 10; // puede ser int o double
String texto = "Flutter";
bool activo = true;
// var: el tipo queda fijo tras la inferencia
var edad = 25; // edad es int
// edad = "veinte"; // Error: no puedes asignar String a un int
// Object: acepta todo, pero limita los métodos
Object algo = "hola";
print(algo.toString()); // OK
// print(algo.length); // Error: Object no tiene .length
// dynamic: sin verificación (peligroso)
dynamic libre = "hola";
print(libre.length); // 4, funciona en runtime
libre = 10;
// print(libre.length); // Explota en runtime: int no tiene .length
}
Usar dynamic "por comodidad" para no pensar en tipos. Eso tira a la basura una de las mayores ventajas de Dart: que el compilador atrapa errores antes de ejecutar. Si de verdad no sabes el tipo, casi siempre Object? con una verificación (is) es más seguro que dynamic.
"Dart tiene tipos como
int,double(ambos hijos denum),String,bool,List,SetyMap. Para casos donde no fijo el tipo,vardeja que Dart lo infiera y luego lo mantiene fijo;Objectacepta cualquier valor pero me obliga a verificar el tipo antes de usarlo; ydynamicdesactiva la verificación, lo que solo uso en casos muy puntuales porque los errores se mueven a tiempo de ejecución."
¿Qué diferencia hay entre estas dos declaraciones?
var a = 5;
dynamic b = 5;
Ver respuesta
a queda con tipo int fijo: si intentas a = "hola" da error al compilar. b es dynamic: puedes reasignarle un String sin problema (b = "hola"), porque no hay verificación de tipos. var es seguro; dynamic traslada los errores a tiempo de ejecución.