❓ Que significa null?
null indica que non temos un valor. Non é o mesmo que 0 nin que un texto baleiro (''). Por defecto, unha variable de tipo String non admite null. Para permitilo escribimos String?.
String? telefono; // Aínda non temos teléfono: vale null.
print(telefono);
telefono = '988 000 000'; // Agora contén texto.
print(telefono);
Chamaremos a estes tipos tipos que admiten null (ou tipos anulables). Non os confundas cos parámetros opcionais das funcións.
🛟 Dar unha alternativa con ??
valor ?? alternativa usa a alternativa só se o valor é null.
int? nota = int.tryParse('pendente'); // Non é un número: devolve null.
print(nota ?? 0); // Mostra 0; a variable nota segue sendo null.
Non sempre ten sentido substituír un dato incorrecto por cero. Na lectura por teclado aprenderemos a pedir de novo o dato.
🔗 Acceder con ?.
?. só accede ao membro se hai un valor. Se é null, o resultado tamén é null.
String? nome = null;
print(nome?.toUpperCase()); // null: non se chama a toUpperCase().
print(nome?.toUpperCase() ?? 'Sen nome');
Cando xa saibamos usar if, tamén poderemos comprobar nome != null antes de traballar con el.
⚠️ Afirmar que hai un valor con !
dato! dille a Dart: «aquí estou seguro de que non é nulo». Non crea un valor nin corrixe o dato: se é null, o programa falla. Non o engadas só para quitar un aviso do editor; usa unha comprobación ou unha alternativa cando corresponda.
int? nota = int.tryParse('8');
print(nota! + 1); // Sabemos que o texto '8' se pode converter.
// Se o texto fose 'oito', nota sería null e esta operación fallaría.
📚 Consulta: seguridade fronte a nulos – https://dart.dev/null-safety/understanding-null-safety.