¿Null o Nada? Descifrando el misterio de los parámetros en Dart

Rene Lazo
Flutter España
Published in
2 min readMay 22, 2024

A veces, en el mundo del desarrollo, las cosas se ponen un poco confusas. ¿Un parámetro es null porque se lo pasaron así o simplemente porque no se especificó? Es como tratar de descifrar un enigma: ¿fue un “no” o un “no sé”?

En Dart, la diferencia entre un parámetro null y uno que no se ha especificado puede ser crucial. Para evitar que nuestro código se convierta en una sopa de letras, necesitamos una forma de desenmascarar este misterio.

¡Presentamos la técnica del marcador!

Imagina un objeto mágico llamado _unspecified. Este objeto no contiene información, solo existe para indicarnos que un parámetro no se ha definido. Con un poco de magia de código, podemos usar este objeto como un faro para distinguir entre un null intencional y la falta de información.

const Object _unspecified = Object();

Ahora, creamos una función que busca este objeto mágico:

bool _isUnspecified(value) => identical(value, _unspecified);

En nuestro código, podemos usar esta función para averiguar si un parámetro es null por diseño o si simplemente no se ha pasado.

¡Un ejemplo práctico!

Imaginemos la clase SpaceState. En su función copyWith, queremos que los parámetros successMessage y errorMessage puedan ser null, pero también queremos la posibilidad de que simplemente no se especifiquen, conservando el valor original.

class SpaceState {
final bool isLoading;
final String? successMessage;
final String? errorMessage;

SpaceState copyWith({
bool? isLoading,
Object? successMessage = _unspecified,
Object? errorMessage = _unspecified,
}) {
return SpaceState(
isLoading: isLoading ?? this.isLoading,
successMessage: _isUnspecified(successMessage) ? this.successMessage : successMessage as String?,
errorMessage: _isUnspecified(errorMessage) ? this.errorMessage : errorMessage as String?,
);
}
}

¡Eureka!

Con este enfoque, podemos evitar errores y mantener nuestro código limpio y legible. La técnica del marcador nos permite diferenciar entre “null” y “no especificado” con una claridad que nos deja más cerca de alcanzar la perfección en nuestro código.

Recuerda:

  • La técnica del marcador es una solución creativa y flexible, pero también puede agregar un poco de complejidad a tu código.
  • Es fundamental mantener la consistencia en el uso del marcador para evitar confusiones y errores.

¡Con esta técnica, tu código hablará con claridad y te ayudará a crear aplicaciones robustas y fáciles de entender!

--

--

Rene Lazo
Flutter España

Tech enthusiast, loves automation solutions for everyday problems, Flutter, UI and UX